Delightful Soup è una libreria Python per estrarre informazioni dai record HTML e XML. Funziona con il vostro parser preferito per dare metodi informali per esplorare, guardare e modificare l’albero di parsi. Risparmia regolarmente ore di lavoro agli ingegneri del software o lunghi periodi di lavoro.

Queste linee guida rappresentano ogni singolo elemento significativo di Excellent Soup 4, con i modelli. Vi do ciò per cui la libreria è utile, come funziona, come utilizzarla, come farle fare ciò di cui avete bisogno, e cosa fare quando danneggia i vostri desideri.

I modelli in questa documentazione dovrebbero funzionare in modo simile in Python 2.7 e Python 3.2.

Potreste cercare la documentazione per Lovely Soup 3. A condizione che questo sia vero, dovreste rendervi conto che Wonderful Soup 3 non verrà mai più creata e che Excellent Soup 4 è prescritta per ogni singola nuova impresa. Nel caso in cui si debbano scoprire i contrasti tra la Zuppa Ottima 3 e la Zuppa Meravigliosa 4, si veda il codice Porting a BS4.

Questa documentazione è stata convertita in diversi dialetti dai clienti di Wonderful Soup:

Questo documento è naturalmente disponibile anche in cinese.

Questa pagina è disponibile in giapponese (link esterno)

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

un documento HTML che sarà usato come esempio in tutto il documento. Fa parte di una storia di Alice nel Paese delle Meraviglie:

html_doc = “”””

<html><head><titolo><titolo>La storia del ghiro</titolo></head>

<body>

<p class=”titolo”><b>La storia del Gattopardo</b></p>

<p class=”storia”>Una volta c’erano tre sorelline; e i loro nomi erano

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

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

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

e vivevano in fondo a un pozzo.

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

“””

L’esecuzione del documento “tre sorelle” attraverso Beautiful Soup ci dà un oggetto BeautifulSoup, che rappresenta il documento come una struttura di dati annidata:

da bs4 import BeautifulSoup

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

stampa(soup.prettify())

# <html>

# <capo>

# <titolo>

# La storia del Ghiro

# </titolo>

# </head>

# <body>

<p class=”title”>

#    <b>

# La storia del Ghiro

#    </b>

#   </p>

<p class=”storia”>

# C’erano una volta tre sorelline; e i loro nomi erano

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

# Elsie… #

#    </a>

#    ,

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

# Lacie

#    </a>

# e

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

# Tillie

#    </a>

# ; e vivevano in fondo a un pozzo.

#   </p>

<p class=”storia”>

#    …

#   </p>

# </body>

# </html>

Ecco alcuni semplici modi per navigare in questa struttura di dati:

zuppa.titolo

<titolo>La storia del Ghiro</title>

titolo.zuppa.nome

# u’titolo’… #

stringa.del.titolo.della zuppa

# u’La storia del Ghiro”.

titolo.della zuppa.nome.del.genitore

# u’testa’… #

zuppa.p

<p class=”titolo”><b>La storia del Gattopardo</b></p>

zuppa.p[‘classe’]

# u’titolo’… #

zuppa.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=”sorella” 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>

Un compito comune è quello di estrarre tutti gli URL trovati all’interno dei tag <a> di una pagina:

per il link in soup.find_all(‘a’):

    stampa(link.get(‘href’))

# http://example.com/elsie

# http://example.com/lacie

# http://example.com/tillie

Un altro compito comune è quello di estrarre tutto il testo da una pagina:

stampa(soup.get_text())

# La storia del Ghiro

#

# La storia del Ghiro

#

# C’erano una volta tre sorelline; e i loro nomi erano

# Elsie,

# Lacie e

# Tillie;

# e vivevano in fondo a un pozzo. #

#

# …

Installazione di una bella zuppa

Se si utilizza una forma continuativa di Debian o Ubuntu Linux, è possibile introdurre Delightful Soup con il gestore dei pacchetti di sistema:

$ in grado di ottenere introdurre python-bs4 (per Python 2)

$ adept ottenere introdurre python3-bs4 (per Python 3)

Wonderful Soup 4 è distribuito attraverso PyPi, quindi nel caso in cui non sia possibile introdurlo con il packager del sistema, è possibile introdurlo con easy_install o pip. Il nome del bundle è beautifulsoup4, e un bundle simile si occupa di Python 2 e Python 3. Assicuratevi di utilizzare la corretta resa di pip o easy_install per il vostro modulo Python (questi potrebbero essere chiamati pip3 e easy_install3 separatamente nel caso stiate utilizzando Python 3).

$ easy_install beautifulsoup4

$ pip introdurre beautifulsoup4

(Il fagotto BeautifulSoup è molto probabilmente non è quello di cui avete bisogno. Questo è il passato scarico significativo, Excellent Soup 3. Un sacco di programmazione utilizza BS3, quindi è ancora accessibile, tuttavia nel caso in cui stiate componendo nuovo codice dovreste introdurre beautifulsoup4).

Nella remota possibilità che non abbiate introdotto easy_install o pip, potete scaricare il tarball sorgente Delightful Soup 4 e introdurlo con setup.py.

$ python setup.py introduce

Come ultima risorsa, il permesso per Delightful Soup vi permette di abbinare l’intera biblioteca con la vostra richiesta. Potete scaricare il tarball, duplicare il suo catalogo bs4 nel codice della vostra applicazione e utilizzare Delightful Soup senza introdurlo in alcun modo.

Uso Python 2.7 e Python 3.2 per creare Delightful Soup, ma dovrebbe funzionare con altre forme in corso.

Problemi dopo la costituzione

Soup Excellent Soup è in bundle come codice Python 2. Nel momento in cui lo si introduce per l’uso con Python 3, viene di conseguenza cambiato in codice Python 3. Nella remota possibilità che non si introduca il bundle, il codice non verrà cambiato. Ci sono state anche segnalazioni su macchine Windows di un adattamento inappropriato che è stato introdotto.

Nella remota possibilità di ottenere l’ImportError “Nessun modulo chiamato HTMLParser”, la vostra preoccupazione è che stiate eseguendo l’adattamento Python 2 del codice sotto Python 3.

Nel caso in cui si ottenga l’ImportError “No module named html.parser”, la vostra preoccupazione è che stiate eseguendo il modulo Python 3 del codice sotto Python 2.

Nei due casi, l’opzione più solida è quella di espellere completamente l’establishment Lovely Soup dal vostro sistema (contando qualsiasi indice fatto quando avete sganciato la tarball) e tentare di nuovo l’establishment.

Nella remota possibilità di ottenere il SyntaxError “Invalid sentence structure” in attesa ROOT_TAG_NAME = u'[document]’, si deve cambiare il codice di Python 2 in Python 3. Si può fare anche questo introducendo il bundle:

$ python3 setup.py introduce

o poi di nuovo eseguendo fisicamente il contenuto di trasformazione 2to3 di Python sul registro bs4:

$ 2to3-3,2 – w bs4