Ricerca…


Osservazioni

In questa sezione, discutiamo su cosa è Beautiful Soup, a cosa serve e una breve descrizione su come usarlo.

Beautiful Soup è una libreria Python che usa il parser html / xml preinstallato e converte la pagina web / html / xml in una struttura composta da tag, elementi, attributi e valori. Per essere più precisi, l'albero è composto da quattro tipi di oggetti, Tag, NavigableString, BeautifulSoup e Comment. Questo albero può quindi essere "interrogato" usando i metodi / proprietà dell'oggetto BeautifulSoup creato dalla libreria parser.

La tua esigenza: spesso potresti avere una delle seguenti necessità:

  1. Potresti voler analizzare una pagina web per determinare, quanti di quali tag sono stati trovati, quanti elementi di ogni tag sono stati trovati e i loro valori. Potresti volerlo cambiare.

  2. È possibile determinare i nomi e i valori degli elementi, in modo da poterli utilizzare in combinazione con altre librerie per l'automazione delle pagine Web, come Selenium .

  3. Potresti voler trasferire / estrarre i dati mostrati in una pagina Web in altri formati, come un file CSV o in un database relazionale come SQLite o mysql. In questo caso, la libreria ti aiuta con il primo passo, a comprendere la struttura della pagina web, anche se utilizzerai altre librerie per eseguire l'atto di trasferimento.

  4. Potresti voler scoprire quanti elementi sono in stile con un determinato stile CSS e quali.

Sequenza per l'uso di base tipico nel codice Python:

  1. Importa la libreria Beautiful Soup

  2. Apri una pagina Web o un testo html con la libreria BeautifulSoup, citando quale parser usare. Il risultato di questo passaggio è un oggetto BeautifulSoup. (Nota: questo nome del parser menzionato, deve essere già installato come parte dei tuoi html.parser esempio, html.parser , è un pacchetto integrato, "with-batteries" fornito con Python. Puoi installare altri parser come lxml o html5lib .)

  3. "Interroga" o cerca l'oggetto BeautifulSoup usando la sintassi 'object.method' e ottieni il risultato in una raccolta, come ad esempio un dizionario Python. Per alcuni metodi, l'output sarà un valore semplice.

  4. Usa il risultato del passaggio precedente per fare quello che vuoi fare con esso, in resto del tuo codice Python. È inoltre possibile modificare i valori dell'elemento oi valori dell'attributo nell'oggetto tree. Le modifiche non influiscono sull'origine del codice html, ma puoi chiamare i metodi di formattazione dell'output (come ad esempio la prettify ) per creare un nuovo output dall'oggetto BeautifulSoup.

Metodi di uso comune: in genere, i metodi .find e .find_all vengono utilizzati per eseguire la ricerca nell'albero, fornendo gli argomenti di input.

Gli argomenti di input sono: il nome del tag che si sta cercando, i nomi degli attributi e altri argomenti correlati. Questi argomenti possono essere presentati come: una stringa, un'espressione regolare, un elenco o anche una funzione.

Gli usi comuni dell'oggetto BeautifulSoup includono:

  1. Cerca per classe CSS
  2. Cerca per indirizzo di collegamento ipertestuale
  3. Cerca per ID elemento, tag
  4. Cerca per nome attributo. Valore dell'attributo

Se hai la necessità di filtrare l'albero con una combinazione dei criteri di cui sopra, puoi anche scrivere una funzione che valuti come vero o falso, e cercare con quella funzione.

Versioni

Versione Osservazioni Nome del pacchetto Data di rilascio
3.x Versione 3.2.1; Solo Python 2 BeautifulSoup 2012-02-16
4.x Versione 4.5.0; Python 2 e 3 beautifulsoup4 2016/07/20

Installazione o configurazione

pip può essere usato per installare BeautifulSoup. Per installare la Versione 4 di BeautifulSoup, esegui il comando:

pip install beautifulsoup4

Tieni presente che il nome del pacchetto è beautifulsoup4 invece di beautifulsoup , il secondo nome indica la vecchia versione, vedi old beautifulsoup

Esempio di scraping di "Hello World" di BeautifulSoup

from bs4 import BeautifulSoup
import requests

main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")

# Finding the main title tag.
title = soup.find("h1", class_ = "firstHeading")
print title.get_text()

# Finding the mid-titles tags and storing them in a list.
mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")]

# Now using css selectors to retrieve the article shortcut links
links_tags = soup.select("li.toclevel-1")
for tag in links_tags:
    print tag.a.get("href")

# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
                            id = "mw-panel").find_all("div",
                                                      class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
    blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]

print blocks_links[0]

Produzione:

"Hello, World!" program
#Purpose
#History
#Variations
#See_also
#References
#External_links
[u'/wiki/Main_Page', u'/wiki/Portal:Contents', u'/wiki/Portal:Featured_content', u'/wiki/Portal:Current_events', u'/wiki/Special:Random', u'https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en', u'//shop.wikimedia.org']

Inserendo il parser preferito quando si installa Beautiful Soup si evita il solito Warning che dichiara che no parser was explicitely specified .

Diversi metodi possono essere utilizzati per trovare un elemento all'interno dell'albero della pagina web.

Sebbene esistano una manciata di altri metodi, le CSS classes e i CSS selectors sono due modi pratici per trovare elementi nell'albero.

Va notato che possiamo cercare i tag impostando il loro valore di attributo su True durante la ricerca.

get_text() ci consente di recuperare il testo contenuto all'interno di un tag. Lo restituisce come una singola stringa Unicode. tag.get("attribute") consente di ottenere il valore dell'attributo di un tag.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow