Outros objetos do BeautifulSoup

Objetos BeautifulSoup Instâncias vistas nos exemplos anteriores de código como a variável bs. Objetos Tag Obtidos na forma de listas – ou individualmente – por meio da chamada a find e find_all em um objeto BeautifulSoup. Objetos NavigableString Usados para representar texto em tags. Objeto Comment Usado para encontrar comentários HTML em tags de comentário, <!—como este-->.

No Capítulo 1, vimos como navegar em uma árvore do BeautifulSoup em uma única direção. Vamos agora ver como navegar para cima, para os lados e na diagonal em árvores HTML.

Lidando com filhos e descendentes: Os filhos estão sempre exatamente uma tag abaixo de um pai, enquanto os descendentes podem estar em qualquer nível da árvore abaixo de um pai.

Lidando com irmãos: Com a função next_siblings() do BeautifulSoup, é trivial coletar dados de tabelas, particularmente daquelas com linhas de título.

Lidando com pais: Ocasionalmente, poderemos nos ver em situações peculiares que exigirão as funções do BeautifulSoup para encontrar os pais: .parent e .parents.

Expressões Regulares

Um exemplo clássico de expressões regulares pode ser visto na prática de identificação de endereços de email. Ao concatenar todas as regras, temos a seguinte expressão regular: [A-Za-z0-9._+]+@[A-Za-z]+.(com|org|edu|net)

Expressões Regulares e o BeautifulSoup

A maioria das funções que aceita um argumento do tipo string (por exemplo, find(id="umaTagIdAqui")) também aceitará uma expressão regular.

Acessando Atributos

Com frequência no web scraping, não estaremos procurando o conteúdo de uma tag, mas os seus atributos. Com objetos de tag, uma lista Python com os atributos pode ser automaticamente acessada por meio de uma chamada como esta:

myTag.attrs

Expressões Lambda

É uma função que é passada para outra função como uma variável. O BeautifulSoup permite passar determinados tipos de funções como parâmetros da função find_all. A única restrição é que essas funções devem aceitar um objeto tag como argumento e devolver um booleano. Por exemplo, o código a seguir obtém todas as tags que tenham exatamente dois atributos:

 bs.find_all(lambda tag: len(tag.attrs) == 2)

Nesse caso, a função passada como argumento é len(tag.attrs) == 2. Quando ela for True, a função find_all devolverá a tag. Isso significa que ela encontrará as tags com dois atributos, por exemplo:

<div class="body" id="content"></div>
<span style="color:red" class="title"></span>

Last updated