Para iniciantes em raspagem na web com o BeautifulSoup, um artigo discutindo os conceitos de raspagem na web com esta poderosa biblioteca pode ser encontrada aqui.
Este artigo é para programadores, analistas de dados, cientistas ou engenheiros que já têm o conjunto de habilidades de extrair conteúdo das páginas da web usando o BeautifulSoup. Se você não tem conhecimento desta biblioteca, aconselho você a passar pelo tutorial de belo grupo para iniciantes.
Agora podemos prosseguir - quero acreditar que você já tenha esta biblioteca instalada. Caso contrário, você pode fazer isso usando o comando abaixo:
PIP Install BeautifulSoup4Como estamos trabalhando com a extração de dados do HTML, precisamos ter uma página básica de HTML para praticar esses conceitos em. Para este artigo, usaríamos este trecho html para a prática. Vou atribuir o seguinte snippet html a uma variável usando as citações triplas em Python.
sample_content = "" "
Para fazer uma lista não ordenada, a tag UL é usada:
Para fazer uma lista ordenada, a tag OL é usada:
Linux Dica, 2018
Agora que resolvemos isso, vamos trabalhar direto para trabalhar com a biblioteca de beleza do grupo.
Vamos fazer uso de alguns métodos e atributos que estaríamos chamando em nosso objeto de belo grupo. No entanto, precisaríamos analisar nossa string usando o BeautifulSoup e depois atribuir a uma variável “Our_soup”.
de BS4 Import BeautifulSoup como BSODaí em diante, estaríamos trabalhando com a variável “Our_Soup” e chamando todos os nossos atributos ou métodos.
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 trecho html, por exemplo, as tags Li são nós para crianças dos "UL" e das tags "OL".
Aqui estão os métodos que daríamos dar uma olhada:
FindChild ():
O FindChild O método é usado para encontrar o primeiro nó filho dos elementos HTML. Por exemplo, quando damos uma olhada em nossas tags "ol" ou "ul", encontraríamos duas tags de crianças. No entanto, quando usamos o FindChild Método, ele apenas retorna o primeiro nó como o nó da criança.
Este método pode ser muito útil quando queremos obter apenas o primeiro nó filho de um elemento HTML, pois 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.
Aqui está um exemplo:
primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")O código acima retornaria o seguinte:
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'Demos uma olhada no FindChild método e vi como funciona. O FindChildren O método funciona de maneira semelhante, no entanto, como o nome indica, não encontra apenas um nó filho, ele recebe todos os nós de crianças em uma tag.
Quando você precisa obter todos os nós infantis em uma etiqueta, o FindChildren Método é o caminho a seguir. Este método retorna todos os nós infantis em uma lista, você pode acessar a etiqueta de sua escolha usando o número do índice.
Aqui está um exemplo:
primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")Isso retornaria os nós das crianças em uma lista:
[[Para obter o segundo nó do filho na lista, o código a seguir faria o trabalho:
Imprimir (First_Child.FindChildren () [1])Para obter o seguinte resultado:
Isso é tudo o que o belo grupo fornece quando se trata de métodos. No entanto, não termina aí. Os atributos também podem ser chamados em nossos objetos bonitos para obter o nó de criança/filhos/descendentes de um elemento HTML.
conteúdo:
Enquanto o FindChildren o método fez o trabalho direto de extrair os nós das crianças, o conteúdo atributos fazem algo um pouco diferente.
O conteúdo Atributo retorna uma lista de todo o conteúdo em um elemento HTML, incluindo os nós do Children. Então, quando você chama o conteúdo atributo em um objeto bonito, ele retornaria o texto como cordas e os nós nas tags como um BS4.elemento.Marcação objeto.
Aqui está um exemplo:
primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")Isso retorna o seguinte:
["\ n aqui está uma lista ordenada \ n",Como você pode ver, a lista contém o texto que vem antes de um nó infantil, o nó infantil e o texto que vem depois do nó da criança.
Para acessar o segundo nó filho, tudo o que precisamos fazer é usar seu número de índice, como mostrado abaixo:
Imprimir (First_Child.Conteúdo [3])Isso retornaria o seguinte:
crianças:
Aqui está um atributo que faz quase a mesma coisa que o conteúdo atributo. No entanto, tem uma pequena diferença que pode causar um enorme impacto (para aqueles que levam a sério a otimização de código).
O atributo das crianças também retorna o texto que vem antes de um nó infantil, o nó da criança e o texto que vem depois do nó da criança. A diferença aqui é que ele os devolve como um gerador em vez de uma lista.
Vamos dar uma olhada no exemplo a seguir:
primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")O código acima fornece os seguintes resultados (o endereço em sua máquina não precisa contribuir com o 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:
primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")Isso dá o seguinte resultado:
["\ n aqui está uma lista ordenada \ n",Descendentes:
Enquanto o crianças atributo funciona para obter apenas o conteúdo dentro de uma etiqueta 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 da criança. Portanto, não retorna apenas os nós dos filhos, ele retorna netos também.
Além disso, retornando o texto e as tags, ele também retorna o conteúdo nas tags como strings também.
Assim como o crianças atributo, descendentes Retorna seus resultados como gerador.
Podemos ver isso abaixo:
primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")Isso dá o seguinte resultado:
Como visto anteriormente, podemos converter este objeto gerador em uma lista:
primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")Nós teríamos a lista abaixo:
["\ n aqui está uma lista ordenada \ n",Conclusão
Aí está, cinco maneiras diferentes de acessar os nós de crianças em elementos html. Pode haver mais maneiras, no entanto, com os métodos e atributos discutidos neste artigo, deve -se poder acessar o nó filho de qualquer elemento HTML.