Encontrando nós para crianças com lindas sopa

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

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 BeautifulSoup4

Como 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 = "" "

Linuxhint



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


    Aqui está uma lista não ordenada
  • Primeira opção

  • Segunda opçao




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


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

  2. Número dois



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 BSO
Our_soup = BSO (Sample_Content, "LXML")

Daí 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
  • FindChildren
  • conteúdo
  • crianças
  • descendentes

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")
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 ():

    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")
    Imprimir (First_Child.FindChildren ())

    Isso retornaria os nós das crianças em uma lista:

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

    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:

  • Número dois
  • 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")
    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ó 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:

  • Número dois
  • 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")
    Imprimir (First_Child.crianças)

    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")
    Imprimir (Lista (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 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")
    Imprimir (First_Child.descendentes)

    Isso dá o seguinte resultado:

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

    primeiro_child = Our_soup.encontre ("corpo").encontre ("ol")
    Imprimir (Lista (First_Child.descendentes))

    Nós teríamos 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 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.