BeautifulSoup

Tutorial Python BeautifulSoup para iniciantes

Tutorial Python BeautifulSoup para iniciantes
Web scraping é de grande importância no mundo de hoje. Todos precisam de dados, de diferentes fontes, incluindo páginas da web. Neste artigo, veremos como analisar html com a biblioteca beautifulsoup. Extrair os dados necessários de um monte de alfabetos e símbolos, graças a esta ótima biblioteca, tornou-se muito mais fácil. BeautifulSoup escrito em Python pode ser facilmente instalado em sua máquina usando a ferramenta de instalação pip do Python. O seguinte comando ajudaria a instalar a biblioteca:

pip instalar BeautifulSoup4

Para verificar se a instalação foi bem-sucedida, ative o shell interativo do Python e importe o BeautifulSoup. Se nenhum erro aparecer, significa que tudo correu bem.  Se você não sabe como fazer isso, digite os seguintes comandos em seu terminal.

$ python
Python 3.5.2 (padrão, 14 de setembro de 2017, 22:51:06)
[GCC 5.4.0 20160609] no Linux
Digite "ajuda", "direitos autorais", "créditos" ou "licença" para obter mais informações.
>>> import bs4

Para trabalhar com a biblioteca BeautifulSoup, você deve passar em html. Ao trabalhar com sites reais, você pode obter o html de uma página da web usando a biblioteca de solicitações. A instalação e uso da biblioteca de solicitações está além do escopo deste artigo, no entanto, você pode encontrar seu caminho em torno da documentação é muito fácil de usar. Para este artigo, vamos simplesmente usar html em uma string Python que chamaríamos html.

html = "" "

Perfil de Funcionário



Nome:Dr. Peter Parker

Trabalho:Engenheiro de Aprendizado de Máquina

Telefone:+12345678910


Local na rede Internet:
Pparkerworks.com



"" "

Para usar o beautifulsoup, nós o importamos para o código usando o código abaixo:

de bs4 import BeautifulSoup

Isso introduziria BeautifulSoup em nosso namespace e podemos começar a usá-lo para analisar nossa string.

sopa = BeautifulSoup (html, "lxml")

Agora, sopa é um objeto BeautifulSoup do tipo bs4.BeautifulSoup e podemos executar todas as operações da BeautifulSoup no sopavariável.

Vamos dar uma olhada em algumas coisas que podemos fazer com a BeautifulSoup agora.

TORNANDO O FEIO, BONITO

Quando BeautifulSoup analisa html, geralmente não está nos melhores formatos. O espaçamento é horrível. As tags são difíceis de encontrar. Aqui está uma imagem para mostrar como eles ficariam quando você imprimir o sopa:

No entanto, há uma solução para isso. A solução dá ao html o espaçamento perfeito, fazendo as coisas parecerem boas. Esta solução é merecidamente chamada de “embelezar“.

Reconhecidamente, você pode não conseguir usar esse recurso na maioria das vezes; no entanto, há momentos em que você pode não ter acesso à ferramenta de inspecionar elemento de um navegador da web. Naqueles tempos de recursos limitados, você consideraria o método prettify muito útil.

Aqui está como você o usa:

sopa.embelezar()

A marcação ficaria com o espaçamento adequado, assim como na imagem abaixo:

Quando você aplica o método prettify na sopa, o resultado não é mais um tipo bs4.BeautifulSoup. O resultado agora é tipo 'unicode'. Isso significa que você não pode aplicar outros métodos BeautifulSoup nele, no entanto, a sopa em si não é afetada, então estamos seguros.

ENCONTRANDO NOSSAS TAGS FAVORITAS

HTML é feito de tags. Ele armazena todos os seus dados neles, e no meio de toda essa desordem estão os dados de que precisamos. Basicamente, isso significa que quando encontramos as tags certas, podemos obter o que precisamos.

Então, como encontramos as tags certas? Usamos os métodos find e find_all da BeautifulSoup.

É assim que funcionam:

O achar método procura a primeira tag com o nome necessário e retorna um objeto do tipo bs4.elemento.Marcação.

O encontrar tudo por outro lado, procura todas as tags com o nome de tag necessário e os retorna como uma lista do tipo bs4.elemento.ResultSet. Todos os itens da lista são do tipo bs4.elemento.Tag, para que possamos realizar a indexação na lista e continuar nossa bela exploração da sopa.

Vamos ver algum código. Vamos encontrar todas as tags div:

sopa.find (“div“)

Obteríamos o seguinte resultado:

Nome:Dr. Peter Parker

Verificando a variável html, você notaria que esta é a primeira tag div.

sopa.find_all (“div“)

Obteríamos o seguinte resultado:

[
Nome:Dr. Peter Parker
,
Trabalho:Engenheiro de Aprendizado de Máquina
,
Telefone:+12345678910
,
,
Local na rede Internet:
Pparkerworks.com
]

Retorna uma lista.  Se, por exemplo, você quiser a terceira tag div, execute o seguinte código:

sopa.find_all (“div“) [2]

Ele retornaria o seguinte:

Telefone:+12345678910

ENCONTRANDO OS ATRIBUTOS DE NOSSAS TAGS FAVORITAS

Agora que vimos como obter nossas tags favoritas, que tal obter seus atributos?

Você pode estar pensando neste ponto: “Para que precisamos de atributos?“. Bem, muitas vezes, a maioria dos dados de que precisamos serão endereços de e-mail e sites. Esse tipo de dado geralmente é hiperlinkado em páginas da web, com os links no atributo “href“.

Quando extraímos a tag necessária, usando os métodos find ou find_all, podemos obter atributos aplicando atrs. Isso retornaria um dicionário do atributo e seu valor.

Para obter o atributo de e-mail, por exemplo, obtemos o tags que envolvem as informações necessárias e fazer o seguinte.

sopa.find_all (“a“) [0].atrs

O que retornaria o seguinte resultado:

'href': 'mailto: [email protegido]'

A mesma coisa para o atributo do site.

sopa.find_all (“a“) [1].atrs

O que retornaria o seguinte resultado:

'href': '
http: // pparkerworks.com'

Os valores retornados são dicionários e a sintaxe normal do dicionário pode ser aplicada para obter as chaves e os valores.

VAMOS VER OS PAIS E OS FILHOS

Existem tags em todos os lugares. Às vezes, queremos saber quais são as tags filhas e quais são as tags principais.

Se você ainda não sabe o que é uma tag pai e filho, esta breve explicação deve bastar: uma tag pai é a tag externa imediata e um filho é a tag interna imediata da tag em questão.

Dando uma olhada em nosso html, a tag body é a tag pai de todas as tags div. Além disso, a tag em negrito e a tag âncora são filhos das tags div, quando aplicável, pois nem todas as tags div possuem tags âncora.

Portanto, podemos acessar a tag pai chamando o findParent método.

sopa.find ("div").findParent ()

Isso retornaria toda a tag do corpo:


Nome:Dr. Peter Parker

Trabalho:Engenheiro de Aprendizado de Máquina

Telefone:+12345678910


Local na rede Internet:
Pparkerworks.com

Para obter a tag filha da quarta tag div, chamamos o findChildren método:

sopa.find_all ("div") [4].findChildren ()

Ele retorna o seguinte:

[Local na rede Internet:, Pparkerworks.com]

O QUE HÁ PARA NÓS?

Ao navegar nas páginas da web, não vemos tags em todos os lugares da tela. Tudo o que vemos é o conteúdo das diferentes tags. E se quisermos o conteúdo de uma tag, sem todos os colchetes angulares tornando a vida desconfortável? Isso não é difícil, tudo o que faríamos é ligar get_text método na tag de escolha e obtemos o texto na tag e se a tag tiver outras tags, ela também obterá seus valores de texto.

Aqui está um exemplo:

sopa.find ("corpo").get_text ()

Isso retorna todos os valores de texto na tag body:

Nome: Dr. Peter Parker
Trabalho: Engenheiro de Aprendizado de Máquina
Telefone: +12345678910
Email: [email protegido]
Site: pparkerworks.com

CONCLUSÃO

Isso é o que temos para este artigo. No entanto, ainda existem outras coisas interessantes que podem ser feitas com beautifulsoup. Você pode verificar a documentação ou usar dir (BeautfulSoup) no shell interativo para ver a lista de operações que podem ser realizadas em um objeto BeautifulSoup. Isso é tudo de mim hoje, até eu escrever novamente.

Como baixar e jogar Sid Meier's Civilization VI no Linux
Introdução ao jogo Civilization 6 é uma versão moderna do conceito clássico introduzido na série de jogos Age of Empires. A ideia era bastante simples...
Como instalar e jogar Doom no Linux
Introdução ao Doom A série Doom teve origem nos anos 90 após o lançamento do Doom original. Foi um sucesso instantâneo e, a partir desse momento, a sé...
Vulkan para usuários de Linux
A cada nova geração de placas gráficas, vemos os desenvolvedores de jogos ultrapassarem os limites da fidelidade gráfica e se aproximarem mais do foto...