Raspagem na web usando uma linda sopa

Raspagem na web usando uma linda sopa
A raspagem da web é uma técnica usada para selecionar e extrair conteúdo específico de sites. Por exemplo, quando queremos monitorar os preços e como eles mudam, podemos usar um raspador da web para extrair apenas as informações que queremos de um site e jogá -las em um arquivo do Excel. Neste tutorial, estaremos aprendendo a raspar a web usando o BeautifulSoup.

Primeiro, instale o beautifulSoup da seguinte maneira:

PIP Install BeautifulSoup4

BeautifulSoup é aplicado a um arquivo HTML e, portanto, devemos começar obtendo o conteúdo HTML de uma página da Web. Isso geralmente é feito usando o módulo de solicitações. Neste exemplo específico, obteremos o conteúdo HTML de uma página da web e exibiremos. Para isso, primeiro definimos o URL; Nesse caso, escolhi o site da Common Sense Media (porque possui uma lista de filmes com classificações, que podemos estar interessadas em raspar). Em seguida, usamos o método get () para buscar o objeto de resposta e extrair a parte HTML usando o conteúdo ou o atributo de texto.

solicitações de importação
url = "https: // www.Comunssensemedia.org/revisões de filmes "
corpo = solicitações.Get (URL)
body_text = corpo.Conteúdo # ou corpo.texto
Imprimir (corpo.conteúdo) # ou impressão (corpo.texto)

Agora, podemos começar a usar o belo grupo. Criamos um objeto de belo grupo que leva dois argumentos - o arquivo html e o tipo de analisador. Existem quatro analisadores disponíveis - html.Parser, lxml, lxml-xml e html5lib.

De BS4 Import BeautifulSoup
SOPA = BONAGEMSUP (BODY_TEXT, 'LXML')

É preciso também instalar o analisador. Nesse caso, escolhi o analisador LXML, e então vou instalá -lo.

pip install lxml

Agora, podemos fazer praticamente qualquer coisa, mas exploraremos as diferentes possibilidades antes de começar a raspar a web.

(i) O método prettify () reescreverá o texto em um formato legível e "bonito".

sopa.embelezar()

(ii) o método do título recuperará o título.

sopa.título

(iii) O método "P" extrairá todas as tags P do código HTML.

sopa.p

(iv) O método "A" extrairá todas as tags A do código HTML.

sopa.a

(v) O método find_all () encontrará todos os elementos da Web que contêm um argumento específico. Nesse caso, eu passei "a", então encontre_all ("a") encontrará todas as tags "a".

sopa.Find_all ('A')

(vi) O método de localização encontrará todos os argumentos aprovados. Nesse caso, passamos no argumento ID = “Senha.”Portanto, ele pesquisará o código HTML para o ID e, se ele corresponder, recupere a cláusula.

sopa.encontre (id = "senha")

Então, normalmente, gostaríamos de raspar uma página da web para empregos, filmes, cursos, etc., junto com suas respectivas informações (como preços e classificações). Nesse caso, estamos interessados ​​em um site, principalmente raspando a lista de filmes deles.

solicitações de importação
url = "https: // www.Comunssensemedia.org/revisões de filmes "
corpo = solicitações.Get (URL)
body_text = corpo.contente
De BS4 Import BeautifulSoup
SOPA = BONAGEMSUP (BODY_TEXT, 'LXML')

Nesse caso em particular, o código HTML de cada nome do filme (o que estamos raspando) está dentro de um contêiner. Começamos primeiro inspecionando o elemento em questão. No meu caso, escolhi inspecionar o título do primeiro filme ("Till Death").

Quando você inspeciona o elemento, você notará que o que somos depois - o título do filme "Till Death" - está contido em uma tag "div" com a classe "Content -content -wrapper.”Esta primeira tag“ div ”continuará sendo recorrendo ao longo do código HTML, já que cada título do filme está contido em uma tag“ div ”. E assim dizemos que, para cada div em divs, desejamos selecionar a tag sub- "div" com uma classe diferente de "Views-Field Views-Field-Field-Reference-Review-Ent-Prod Result-Title."Depois disso, vemos uma etiqueta" forte "com o conteúdo de campo da classe.”Então fazemos a mesma coisa de novo. E, finalmente, nosso próprio título está aninhado com uma tag "A", então selecionamos a tag "A".

divs = sopa.find_all ("div", classe _ = "content-content-wrapper")

Observe aqui que depois da aula da palavra, há um sublinhado. Isso ressalta a classe de código HTML das classes Python. Então, escrevemos o código que extrairá a tag "Div" com a classe "Content-Content-Wrapper.”

Então você escreve:

# divs = sopa.find_all ("div", 'classe': 'content-content-wrapper')
para div em divs:
divs2 = div.find_all ("div", classe _ = "Views-Field Views-Field-Field-Reference-Review-Ent-Prod Resultle")
para div em divs2:
forts = div.Find_all ("Strong", Class _ = "Conteúdo do campo")
para fortes em fortes:
aa = forte.Find_all ("A")
para um em AA:
impressão (a.texto)

Os loops fores existem para escolher cada filme. Finalmente, quando queremos selecionar o texto, dizemos um.texto. Este último imprimirá cada título do filme e, dessa maneira, podemos raspar o que quisermos.

Agora, suponha que desejássemos salvar esses dados em um arquivo CSV; Isso também é possível. Para escrever para CSV, você deve primeiro importar o módulo CSV. Primeiro, vamos abrir o arquivo onde queremos as informações armazenadas. Aqui passaremos três argumentos - o nome do arquivo, o modo e se queremos uma nova linha ou não. Aqui, estamos adicionando uma nova linha igual a nada para impedir que o arquivo CSV adicione retornos (ou novas linhas vazias) após cada entrada. Segundo, passamos o arquivo para o método Writer (). Terceiro, escrevemos uma nova linha. Nesse caso, estou chamando minha nova fila de "filmes" porque é o cabeçalho para o que deve seguir.

importar CSV
arquivo = aberto ("filme.CSV "," W ", newline =")
file_write = csv.escritor (arquivo)
file_write.Writertow (['filmes'])

Quarto, em vez de apenas imprimir a variável "A", vamos retirar os espaços vazios e depois usar o método Writertow () para escrevê -lo no arquivo CSV.

para div em divs:
divs2 = div.find_all ("div", classe _ = "Views-Field Views-Field-Field-Reference-Review-Ent-Prod Resultle")
para div em divs2:
forts = div.Find_all ("Strong", Class _ = "Conteúdo do campo")
para fortes em fortes:
aa = forte.Find_all ("A")
para um em AA:
file_write.Writerow ([a.texto.faixa()])

Todo o código seria algo assim:

solicitações de importação
url = "https: // www.Comunssensemedia.org/revisões de filmes "
corpo = solicitações.Get (URL)
body_text = corpo.contente
De BS4 Import BeautifulSoup
SOPA = BONAGEMSUP (BODY_TEXT, 'LXML')
divs = sopa.find_all ("div", classe _ = "content-content-wrapper")
importar CSV
arquivo = aberto ("filme.CSV "," W ", newline =")
file_write = csv.escritor (arquivo)
file_write.Writertow (['filmes'])
para div em divs:
divs2 = div.find_all ("div", classe _ = "Views-Field Views-Field-Field-Reference-Review-Ent-Prod Resultle")
para div em divs2:
forts = div.Find_all ("Strong", Class _ = "Conteúdo do campo")
para fortes em fortes:
aa = forte.Find_all ("A")
para um em AA:
file_write.Writerow ([a.texto.faixa()])

Este é apenas um exemplo simples. Na realidade, a raspagem da web é tão poderosa que você pode raspar e monitorar praticamente qualquer página da web.

Codificação feliz!