Delightful Soup é uma biblioteca Python para tirar informações de registros HTML e XML. Ela funciona com o seu analisador preferido para dar métodos informais para explorar, procurar e alterar a árvore de análise. Regularmente poupa aos engenheiros de software horas ou longos trechos de trabalho.

Estas directrizes representam cada um dos elementos significativos da Excelente Sopa 4, com modelos. Eu lhe dou o que a biblioteca é útil, como ela funciona, como utilizá-la, como fazê-la fazer o que você precisa, e o que fazer quando ela prejudica seus desejos.

Os modelos nesta documentação devem trabalhar uma rota semelhante em Python 2.7 e Python 3.2.

Você pode estar procurando a documentação para Lovely Soup 3. Desde que isto seja verdade, você deve perceber que a Sopa Maravilhosa 3 nunca mais está sendo criada e que a Sopa Excelente 4 é prescrita para cada novo empreendimento. Caso você precise descobrir sobre os contrastes entre a Sopa Excelente 3 e a Sopa Maravilhosa 4, veja o código de Porting para BS4.

Esta documentação foi convertida em diferentes dialectos por clientes da Wonderful Soup:

Este documento também está disponível em chinês, claro.

Esta página está disponível em japonês (link externo)

이 문서는 한국어 번역도 가능합니다. (외부 링크)

um documento HTML que será usado como exemplo ao longo deste documento. É parte de uma história de Alice no País das Maravilhas:

html_doc = “””

<html>>cabeça>>título>A história do Dormitório</título>>cabeça>

<corpo>

<p class=”title”><b>A história do Dormitório</b></p>

<p class=”story”>Após um tempo em que havia três irmãs pequenas; e os seus nomes eram

<a href=”http://example.com/elsie” class=”sister” id=”link1″>Elsie</a>,

<a href=”http://example.com/lacie” class=”sister” id=”link2″>Lacie</a> e

<a href=”http://example.com/tillie” class=”sister” id=”link3″>Tillie</a>;

e viviam no fundo de um poço.</p>

<p class=”story”>…</p>

“””

A execução do documento “três irmãs” através da Beautiful Soup nos dá um objeto BeautifulSoup, que representa o documento como uma estrutura de dados aninhada:

da bs4 importar BeautifulSoup

sopa = BeautifulSoup(html_doc, ‘html.parser’)

print(soup.prettify())

# <html>

<head>

#title>

# The Dormouse’s story

# </title>

</head>

# <corpo>

<p class=”title”>

#    <b>

# The Dormouse’s story

#    </b>

#   </p>

<p class=”story”>

# Era uma vez três irmãs pequenas; e os seus nomes eram

#a class=”sister” href=”http://example.com/elsie” id=”link1″>

# Elsie

#    </a>

#    ,

#a class=”sister” href=”http://example.com/lacie” id=”link2″>

# Lacie

#    </a>

# e

#a class=”sister” href=”http://example.com/tillie” id=”link2″>

# Tillie

#    </a>

# ; e eles viviam no fundo de um poço.

#   </p>

<p class=”story”>

#    …

#   </p>

# </corpo>

# </html>

Aqui estão algumas maneiras simples de navegar nessa estrutura de dados:

soup.title

#title>A história do Dormitório</title>

soup.title.name

# u’title’

soup.title.string

# u’A história do Dormitório’

soup.title.parent.name

# u’head’

sopa.p

<p class=”title”><b>A história do Dormitório</b></p>

soup.p[‘class’]

# u’title’

sopa.a

#a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>

soup.find_all(‘a’)

# [<a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>,

#a class=”sister” href=”http://example.com/lacie” id=”link2″>Lacie</a>,

#a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>]

soup.find(id=”link3″)

#a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>

Uma tarefa comum é extrair todas as URLs encontradas dentro das tags <a> de uma página:

para link em soup.find_all(‘a’):

    print(link.get(‘href’))

# http://example.com/elsie

# http://example.com/lacie

# http://example.com/tillie

Outra tarefa comum é extrair todo o texto de uma página:

print(soup.get_text())

# The Dormouse’s story

#

# The Dormouse’s story

#

# Era uma vez três irmãs pequenas; e os seus nomes eram

# Elsie,

# Lacie e

# Tillie;

# e eles viviam no fundo de um poço.

#

# …

Instalando a Sopa Linda

Se você está utilizando uma forma contínua de Debian ou Ubuntu Linux, você pode introduzir o Delightful Soup com o gerenciador de pacotes do sistema:

$ capaz de introduzir python-bs4 (para Python 2)

$ adeptos introduzem python3-bs4 (para Python 3)

O Wonderful Soup 4 é distribuído através do PyPi, por isso, caso não o possa introduzir com o empacotador do sistema, pode introduzi-lo com easy_install ou pip. O nome do pacote é beautifulsoup4, e um pacote similar lida com Python 2 e Python 3. Assegure-se de utilizar a versão correcta do pip ou easy_install para a sua forma Python (estes podem chamar-se pip3 e easy_install3 separadamente, caso esteja a utilizar o Python 3).

$ easy_install beautifulsoup4

$ pip introduz a beautifulsoup4

(O pacote BeautifulSoup muito provavelmente não é o que você precisa. Essa é a descarga significativa do passado, Excelente Sopa 3. Muita programação utiliza o BS3, então ele ainda é acessível, no entanto, caso você esteja compondo um novo código, você deve introduzir o BeautifulSoup4).

Na hipótese de você não ter easy_install ou pip introduzido, você pode fazer o download do Delightfulful Soup 4 source tarball e introduzi-lo com setup.py.

$ python setup.py introduz

Como último recurso, a licença para Deliciosa Sopa permite que você junte toda a biblioteca com a sua aplicação. Você pode baixar o tarball, duplicar seu catálogo bs4 na base de código da sua aplicação e utilizar a Delightful Soup sem apresentá-la por nenhum meio.

Eu uso Python 2.7 e Python 3.2 para criar a Delightful Soup, mas deve funcionar com outras formas em andamento.

Questões após o estabelecimento

Excelente sopa é empacotada como código Python 2. No momento em que você a introduz para uso com Python 3, ela é consequentemente mudada para o código Python 3. Na hipótese de você não introduzir o pacote, o código não será alterado. Também tem havido relatos em máquinas Windows de uma adaptação inapropriada sendo introduzida.

Na hipótese de você obter o ImportError “No module named HTMLParser”, sua preocupação é que você está executando a adaptação Python 2 do código sob Python 3.

Caso você receba o ImportError “No module named html.parser”, sua preocupação é que você esteja rodando a forma Python 3 do código sob Python 2.

Nos dois casos, a sua opção mais sólida é expulsar totalmente o estabelecimento Lovely Soup do seu sistema (contando qualquer índice feito quando você soltou o tarball) e tentar o estabelecimento mais uma vez.

Na hipótese remota de obter a SyntaxError “Estrutura de frases inválidas” em espera ROOT_TAG_NAME = u'[document]’, você tem que mudar o código Python 2 para Python 3. Você pode fazer isso, ou introduzindo o pacote:

$ python3 setup.py introduz

ou então novamente executando fisicamente o conteúdo de transformação 2 a 3 do Python no registro bs4:

$ 2to3-3.2 – w bs4