Dovrei aprire una sezione del blog che si chiama ‘il software salva…’ si, proprio quello!
Scenario: script in Python che prende i dati da un database, li normalizza e li inserisce nel backend di un’applicazione per mobile. I dati nel DB di provenienza sono scritti da un CMS, fra le altre cose sono farciti di tag HTML. Che fare? Prima della normalizzazione bisogna togliere tutti i tag. Una breve ricerca su google ed ecco trovata Beautiful Soup una classe Python che serve a fare il parsing di HTML e XML.
“Rubo” gli esempi della documentazione per dare l’idea di quanto potente sia. Prendiamo del testo con tag HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)

html_doc = """
<html><head><title>The Dormouse's story</title></head>

<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

Vogliamo estrarre tutti gli anchor che contiene? Ecco come:

1
2
3
4
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>]

Vogliamo i soli link? Ecco come:

1
2
3
4
5
for link in soup.find_all('a'):
    print(link.get('href'))
# http://example.com/elsie
# http://example.com/lacie
# http://example.com/tillie

E, alla fine, ecco il mio caso: vogliamo togliere tutti i tag HTML? Ecco come:

1
2
3
4
5
6
7
8
9
10
11
12
print(soup.get_text())
# The Dormouse's story
#
# The Dormouse's story
#
# Once upon a time there were three little sisters; and their names were
# Elsie,
# Lacie and
# Tillie;
# and they lived at the bottom of a well.
#
# ...

Ma fa solo questo? No, fa molto di più, basta dare un’occhiata al sito per accorgersene.

One thought on “Una zuppa….fantastica (a beautiful soup)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *