BeautifulSoup

Encontrando nós de crianças com uma bela sopa

Encontrando nós de crianças com uma bela sopa
A tarefa de web scraping exige a compreensão de como as páginas da web são estruturadas. Para obter as informações necessárias de páginas da web, é preciso entender a estrutura das páginas da web, analisar as tags que contêm as informações necessárias e, em seguida, os atributos dessas tags.

Para iniciantes em web scraping com BeautifulSoup, um artigo que discute os conceitos de web scraping com esta poderosa biblioteca pode ser encontrado aqui.

Este artigo é para programadores, analistas de dados, cientistas ou engenheiros que já possuem o conjunto de habilidades para extrair conteúdo de páginas da web usando BeautifulSoup. Se você não tem nenhum conhecimento dessa biblioteca, aconselho que consulte o tutorial do BeautifulSoup para iniciantes.

Agora podemos prosseguir - quero acreditar que você já tem esta biblioteca instalada.  Caso contrário, você pode fazer isso usando o comando abaixo:

pip instalar BeautifulSoup4

Uma vez que estamos trabalhando com a extração de dados de HTML, precisamos ter uma página HTML básica para praticar esses conceitos em.  Para este artigo, usaríamos este snippet de HTML para praticar. Vou atribuir o seguinte snippet de HTML a uma variável usando as aspas triplas em Python.

sample_content = "" "

LinuxHint



Para fazer uma lista não ordenada, a tag ul é usada:
 




Para fazer uma lista ordenada, a tag ol é usada:
 


    Aqui está uma lista ordenada
  1. Número um

  2. Número dois



Dica de Linux, 2018



"" "

Agora que resolvemos isso, vamos começar a trabalhar com a biblioteca BeautifulSoup.

Faremos uso de alguns métodos e atributos que chamaríamos em nosso objeto BeautifulSoup. No entanto, precisaríamos analisar nossa string usando BeautifulSoup e, em seguida, atribuir a uma variável “our_soup”.

de bs4 import BeautifulSoup como bso
our_soup = bso (amostra_content, "lxml")

Daí em diante, estaríamos trabalhando com a variável "nosso_soup" e chamando todos os nossos atributos ou métodos nela.

Em uma nota rápida, se você ainda não sabe o que é um nó filho, é basicamente um nó (tag) que existe dentro de outro nó. Em nosso snippet de HTML, por exemplo, as tags li são nós filhos das tags “ul” e “ol”.

Aqui estão os métodos que veríamos:

findChild ():

O findChild método é usado para encontrar o primeiro nó filho de elementos HTML. Por exemplo, quando examinamos nossas tags “ol” ou “ul”, encontraríamos duas tags filhas nelas. No entanto, quando usamos o findChild método, ele só retorna o primeiro nó como o nó filho.

Este método pode ser muito útil quando queremos obter apenas o primeiro nó filho de um elemento HTML, pois ele retorna o resultado necessário imediatamente.

O objeto retornado é do tipo bs4.elemento.Marcação. Podemos extrair o texto dele chamando o atributo de texto nele.

Aqui está um exemplo:

first_child = our_soup.find ("corpo").find ("ol")
imprimir (first_child.findChild ())

O código acima retornaria o seguinte:

  • Número um
  • Para obter o texto da tag, chamamos o texto Atributo nele.

    Como:

    imprimir (first_child.findChild ().texto)

    Para obter o seguinte resultado:

    'Número um'
    findChildren ():

    Nós demos uma olhada no findChild método e vi como funciona. O findChildren método funciona de maneira semelhante, no entanto, como o nome indica, ele não encontra apenas um nó filho, ele obtém todos os nós filhos em uma tag.

    Quando você precisa obter todos os nós filhos em uma tag, o findChildren método é o caminho a percorrer. Este método retorna todos os nós filhos em uma lista, você pode acessar a tag de sua escolha usando seu número de índice.

    Aqui está um exemplo:

    first_child = our_soup.find ("corpo").find ("ol")
    imprimir (first_child.findChildren ())

    Isso retornaria os nós filhos em uma lista:

    [
  • Número um
  • ,
  • Número dois
  • ]

    Para obter o segundo nó filho da lista, o código a seguir faria o trabalho:

    imprimir (first_child.findChildren () [1])

    Para obter o seguinte resultado:

  • Número dois
  • Isso é tudo que a BeautifulSoup oferece quando se trata de métodos. No entanto, não termina aí. Os atributos também podem ser chamados em nossos objetos BeautifulSoup para obter o nó filho / filho / descendente de um elemento HTML.

    conteúdo:

    Enquanto o findChildren método fez o trabalho simples de extrair os nós filhos, o conteúdo atributos faz algo um pouco diferente.

    O conteúdo atributo retorna uma lista de todo o conteúdo em um elemento HTML, incluindo os nós filhos. Então, quando você chama o conteúdo atributo em um objeto BeautifulSoup, ele retornaria o texto como strings e os nós nas tags como um bs4.elemento.Marcação objeto.

    Aqui está um exemplo:

    first_child = our_soup.find ("corpo").find ("ol")
    imprimir (first_child.conteúdo)

    Isso retorna o seguinte:

    ["\ n Aqui está uma lista ordenada \ n",
  • Número um
  • ,
    '\ n',
  • Número dois
  • , '\ n']

    Como você pode ver, a lista contém o texto que vem antes de um nó filho, o nó filho e o texto que vem depois do nó filho.

    Para acessar o segundo nó filho, tudo o que precisamos fazer é usar seu número de índice, conforme mostrado abaixo:

    imprimir (first_child.conteúdo [3])

    Isso retornaria o seguinte:

  • Número dois
  • crianças:

    Aqui está um atributo que faz quase a mesma coisa que o atributo de conteúdo. No entanto, tem uma pequena diferença que pode causar um grande impacto (para aqueles que levam a otimização de código a sério).

    O atributo filhos também retorna o texto que vem antes de um nó filho, o próprio nó filho e o texto que vem depois do nó filho. A diferença aqui é que ele os retorna como um gerador em vez de uma lista.

    Vamos dar uma olhada no seguinte exemplo:

    first_child = our_soup.find ("corpo").find ("ol")
    imprimir (first_child.crianças)

    O código acima fornece os seguintes resultados (o endereço em sua máquina não precisa corresponder ao abaixo):

    Como você pode ver, ele retorna apenas o endereço do gerador. Poderíamos converter este gerador em uma lista.

    Podemos ver isso no exemplo abaixo:

    first_child = our_soup.find ("corpo").find ("ol")
    print (list (first_child).crianças))

    Isso dá o seguinte resultado:

    ["\ n Aqui está uma lista ordenada \ n",
  • Número um
  • ,
    '\ n',
  • Número dois
  • , '\ n']

    descendentes:

    Enquanto o crianças atributo funciona em obter apenas o conteúdo dentro de uma tag i.e. o texto e nós no primeiro nível, o descendentes atributo vai mais fundo e faz mais.

    O descendentes atributo obtém todo o texto e nós que existem nos nós filhos. Portanto, ele não retorna apenas nós filhos, ele retorna nós netos também.

    Além de retornar o texto e as tags, ele também retorna o conteúdo das tags como strings também.

    Assim como o crianças atributo, descendentes retorna seus resultados como um gerador.

    Podemos ver isso abaixo:

    first_child = our_soup.find ("corpo").find ("ol")
    imprimir (first_child.descendentes)

    Isso dá o seguinte resultado:

    Como visto anteriormente, podemos converter esse objeto gerador em uma lista:

    first_child = our_soup.find ("corpo").find ("ol")
    print (list (first_child).descendentes))

    Gostaríamos de obter a lista abaixo:

    ["\ n Aqui está uma lista ordenada \ n",
  • Número um
  • ,
    'Número Um', '\ n',
  • Número dois
  • , 'Número Dois', '\ n']

    Conclusão

    Aí está, cinco maneiras diferentes de acessar nós filhos em elementos HTML. Pode haver mais maneiras, no entanto, com os métodos e atributos discutidos neste artigo, deve-se ser capaz de acessar o nó filho de qualquer elemento HTML.

    Como usar o Xdotool para estimular cliques do mouse e pressionamentos de tecla no Linux
    Xdotool é uma ferramenta de linha de comando gratuita e de código aberto para simular cliques do mouse e pressionamentos de tecla. Este artigo irá cob...
    Os 5 principais produtos ergonômicos de mouse de computador para Linux
    O uso prolongado do computador causa dor no pulso ou nos dedos? Você está sofrendo de rigidez nas articulações e constantemente precisa apertar as mão...
    Como alterar as configurações do mouse e touchpad usando Xinput no Linux
    A maioria das distribuições Linux vem com a biblioteca “libinput” por padrão para lidar com eventos de entrada em um sistema. Ele pode processar event...