Raschia un sito Web con questo bellissimo tutorial su Python per zuppa

Raschia un sito Web con questo bellissimo tutorial su Python per zuppa

Beautiful Soup è una libreria Python open source. Utilizza i parser di navigazione per raschiare il contenuto dei file XML e HTML. Hai bisogno di dati per diversi scopi analitici. Tuttavia, se non conosci Python e il web scraping, vale la pena provare la libreria Beautiful Soup di Python per un progetto di web scraping.





Con la libreria Beautiful Soup open source di Python, puoi ottenere dati raschiando qualsiasi parte o elemento di una pagina web con il massimo controllo sul processo. In questo articolo, esaminiamo come puoi utilizzare Beautiful Soup per raschiare un sito web.





Come installare una bella zuppa e iniziare con essa

Prima di procedere, in questo articolo tutorial su Beautiful Soup, useremo Python 3 e bellazuppa4 , l'ultima versione di Beautiful Soup. Assicurati di creare un ambiente virtuale Python per isolare il tuo progetto e i suoi pacchetti da quelli sul tuo computer locale.





trova il mio posto perfetto in cui vivere

Per iniziare, devi installare la libreria Beautiful Soup nel tuo ambiente virtuale. Beautiful Soup è disponibile come pacchetto PyPi per tutti i sistemi operativi, quindi puoi installarlo con il pip installa beautifulsoup4 comando tramite terminale.

Tuttavia, se sei su Debian o Linux, il comando sopra funziona ancora, ma puoi installarlo con il gestore di pacchetti eseguendo apt-get install python3-bs4 .



Beautiful Soup non gratta direttamente gli URL. Funziona solo con file HTML o XML già pronti. Ciò significa che non puoi passare un URL direttamente al suo interno. Per risolvere questo problema, è necessario ottenere l'URL del sito Web di destinazione con la libreria delle richieste di Python prima di inviarlo a Beautiful Soup.

Per rendere disponibile quella libreria per il tuo scraper, esegui il pip richieste di installazione comando tramite terminale.





Per utilizzare la libreria parser XML, esegui pip install lxml per installarlo.

Ispeziona la pagina web che desideri raschiare

Prima di raschiare qualsiasi sito Web con cui non hai familiarità, una best practice è ispezionarne gli elementi. Puoi farlo passando il tuo browser alla modalità sviluppatore. È abbastanza facile usa Chrome DevTools se utilizzi Google Chrome.





Tuttavia, è necessario ispezionare una pagina Web per saperne di più sui suoi tag HTML, attributi, classi e ID. In questo modo vengono esposti gli elementi principali di una pagina Web e i suoi tipi di contenuto.

Ti aiuta anche a sviluppare le migliori strategie che puoi utilizzare per ottenere i dati esatti che desideri da un sito Web e come ottenerli.

Come raschiare i dati di un sito Web con una bella zuppa

Ora che hai tutto pronto, apri un editor di codice preferito e crea un nuovo file Python, assegnandogli un nome scelto. Tuttavia, puoi anche utilizzare IDE basati sul Web come Jupyter Notebook se non hai familiarità con l'esecuzione di Python tramite la riga di comando.

Quindi, importa le librerie necessarie:

from bs4 import BeautifulSoup
import requests

Prima di tutto, vediamo come funziona la libreria delle richieste:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Quando esegui il codice sopra, restituisce uno stato 200, che indica che la tua richiesta è andata a buon fine. Altrimenti, ottieni uno stato 400 o altri stati di errore che indicano una richiesta GET non riuscita.

Ricorda di sostituire sempre l'URL del sito web tra parentesi con l'URL di destinazione.

Una volta ottenuto il sito Web con il ottenere richiesta, lo passi quindi a Beautiful Soup, che ora può leggere il contenuto come file HTML o XML utilizzando il suo parser XML o HTML integrato, a seconda del formato scelto.

Dai un'occhiata a questo prossimo frammento di codice per vedere come farlo con il parser HTML:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Il codice sopra restituisce l'intero DOM di una pagina web con il suo contenuto.

Puoi anche ottenere una versione più allineata del DOM usando il abbellire metodo. Puoi provare questo per vedere il suo output:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Puoi anche ottenere il contenuto puro di una pagina web senza caricare il suo elemento con il .testo metodo:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Come raschiare il contenuto di una pagina Web in base al nome del tag

Puoi anche raschiare il contenuto in un particolare tag con Beautiful Soup. Per fare ciò, è necessario includere il nome del tag di destinazione nella richiesta del raschietto Beautiful Soup.

Ad esempio, vediamo come ottenere il contenuto in h2 tag di una pagina web.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

Nello snippet di codice sopra, zuppa.h2 restituisce il primo h2 elemento della pagina web e ignora il resto. Per caricare tutti i h2 elementi, puoi usare il trova tutto funzione integrata e il per ciclo di Python:

e-mail di reimpostazione della password della playstation non ricevuta
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Quel blocco di codice restituisce tutto h2 elementi e il loro contenuto. Tuttavia, puoi ottenere il contenuto senza caricare il tag utilizzando il pulsante .corda metodo:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Puoi utilizzare questo metodo per qualsiasi tag HTML. Tutto quello che devi fare è sostituire il h2 tagga quello che ti piace.

Tuttavia, puoi anche raschiare più tag passando un elenco di tag nel trova tutto metodo. Ad esempio, il blocco di codice sottostante elimina il contenuto di a , h2 , e titolo tag:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Come raschiare una pagina Web utilizzando l'ID e il nome della classe

Dopo aver ispezionato un sito Web con DevTools, ti consente di saperne di più sugli attributi id e class che contengono ciascun elemento nel suo DOM. Una volta che hai quell'informazione, puoi raschiare quella pagina web usando questo metodo. È utile quando il contenuto di un componente di destinazione esce dal database.

Puoi usare il trova metodo per gli scraper di id e di classe. non mi piace il trova tutto metodo che restituisce un oggetto iterabile, il trova Il metodo funziona su un singolo obiettivo non iterabile, che è il ID in questo caso. Quindi, non è necessario utilizzare il per ciclo con esso.

Diamo un'occhiata a un esempio di come puoi raschiare il contenuto di una pagina qui sotto usando l'id:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Per fare ciò per un nome di classe, sostituisci il ID insieme a classe . Tuttavia, scrivendo classe si traduce direttamente in confusione di sintassi poiché Python lo vede come una parola chiave. Per bypassare quell'errore, devi scrivere un carattere di sottolineatura davanti alla classe in questo modo: classe_ .

In sostanza, la riga contenente l'id diventa:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Tuttavia, puoi anche raschiare una pagina web chiamando un particolare nome di tag con il suo ID o classe corrispondente:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Come fare un raschietto riutilizzabile con una bella zuppa

Puoi creare una classe e mettere insieme tutto il codice precedente in una funzione in quella classe per creare uno scraper riutilizzabile che ottenga il contenuto di alcuni tag e i loro ID. Possiamo farlo creando una funzione che accetti cinque argomenti: un URL, due nomi di tag e i loro ID o classi corrispondenti.

Supponiamo che tu voglia racimolare il prezzo delle camicie da un sito di e-commerce. La classe di raschietto di esempio di seguito estrae i tag del prezzo e della maglietta con i loro ID o classi corrispondenti e quindi li restituisce come frame di dati Pandas con 'Price' e Shirt_name come nomi di colonna.

Assicurati di pip installa panda tramite il terminale se non lo hai già fatto.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Il raschietto che hai appena creato è un modulo riutilizzabile e puoi importarlo e utilizzarlo in un altro file Python. Per chiamare il raschiare funzione dalla sua classe, si usa scrapeit.scrape('URL sito web', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Se non fornisci l'URL e altri parametri, il altro l'istruzione ti chiede di farlo.

Per usare quello scaper in un altro file Python, puoi importarlo in questo modo:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Nota: scraper_module è il nome del file Python che contiene la classe scraper.

Puoi anche controllare il Bella documentazione sulla zuppa se vuoi approfondire come sfruttarlo al meglio.

La bella zuppa è un prezioso strumento per raschiare il web

Beautiful Soup è un potente screen scraper Python che ti dà il controllo su come i tuoi dati vengono trasmessi durante lo scraping. È un prezioso strumento aziendale, in quanto può darti accesso ai dati web della concorrenza come prezzi, tendenze di mercato e altro ancora.

è brutto dormire con il telefono?

Anche se abbiamo creato un tag scraper in questo articolo, puoi ancora giocare con questa potente libreria Python per creare strumenti di scraping più utili.

Condividere Condividere Tweet E-mail I migliori strumenti di web scraping online

Hai bisogno di raccogliere dati dai siti web per scopi analitici? Questi strumenti di web scraping lo rendono facile.

Leggi Avanti
Argomenti correlati
  • Programmazione
  • Pitone
Circa l'autore Idisou Omisola(94 articoli pubblicati)

Idowu è appassionato di qualsiasi tecnologia intelligente e produttività. Nel tempo libero gioca con la programmazione e quando si annoia passa alla scacchiera, ma ama anche staccare ogni tanto dalla routine. La sua passione per mostrare alle persone la tecnologia moderna lo motiva a scrivere di più.

Altro da Idowu Omisola

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per consigli tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti