Il web scraping è uno dei migliori metodi di raccolta dati per raccogliere dati e creare set di dati personalizzati su di essi.
Disporre di set di dati di alta qualità è essenziale in quest'era di processi decisionali basati sui dati. Sebbene esistano numerosi set di dati disponibili pubblicamente, a volte potrebbe essere necessario creare set di dati personalizzati che soddisfino le tue esigenze specifiche. Il web scraping consente di estrarre dati dai siti web. Puoi quindi utilizzare questi dati per creare il tuo set di dati personalizzato.
Panoramica dei metodi di raccolta dei dati
Esistono diversi metodi di raccolta dei dati. Includono l'inserimento manuale dei dati, le API, i set di dati pubblici e il web scraping. Ogni metodo ha i suoi vantaggi e limiti.
L'inserimento manuale dei dati richiede molto tempo ed è soggetto a errori umani, soprattutto per la raccolta di dati su larga scala. Tuttavia, è utile per la raccolta di dati su piccola scala e quando i dati non sono disponibili con altri mezzi.
Le API consentono agli sviluppatori di accedere e recuperare i dati in modo strutturato. Spesso forniscono informazioni in tempo reale o regolarmente aggiornate. Tuttavia, l'accesso API potrebbe essere limitato, richiedere l'autenticazione o avere limitazioni di utilizzo.
I set di dati pubblici coprono un'ampia gamma di argomenti e domini. Sono pre-raccolti e spesso si presentano in un formato strutturato, che li rende facilmente accessibili. Possono risparmiare tempo e fatica quando i dati richiesti sono allineati con i set di dati disponibili. Tuttavia, potrebbero non sempre soddisfare le tue esigenze specifiche o essere aggiornate.
Il web scraping fornisce un modo per raccogliere dati da siti Web che non offrono API o hanno un accesso limitato. Consente la personalizzazione, la scalabilità e la possibilità di raccogliere dati da più fonti. Tuttavia, richiede capacità di programmazione, conoscenza della struttura HTML e rispetto delle linee guida legali ed etiche.
Scegliere il web scraping per la raccolta dei dati
Il web scraping ti consente di estrarre informazioni direttamente dalle pagine web, dandoti accesso a una vasta gamma di fonti di dati. Ti dà anche il controllo su quali dati estrarre e su come strutturarli. Ciò semplifica la personalizzazione del processo di raschiatura per soddisfare le vostre esigenze specifiche ed estrarre le informazioni precise di cui avete bisogno per il vostro progetto.
Identificare l'origine dei dati
Il primo passo nel web scraping è l'identificazione dell'origine dati. Questo è il sito Web che contiene i dati che desideri raschiare. Quando scegli l'origine dati, assicurati di rispettare i termini di servizio dell'origine. Questo articolo utilizzerà IMDb (Internet Movie Database) come origine dati.
Configurazione dell'ambiente
Crea un ambiente virtuale. Quindi eseguire il seguente comando per installare le librerie richieste.
pip install richiede panda beautifulsoup4
Userai il richieste libreria per effettuare richieste HTTP. bella zuppa4 per analizzare il contenuto HTML ed estrarre i dati dalle pagine web. Infine, userai panda manipolare e analizzare i dati.
Il codice sorgente completo è disponibile in a Deposito GitHub.
Scrivere lo script di web scraping
Importa le librerie installate nel tuo script per poter utilizzare le funzioni che forniscono.
importare richieste
da bs4 importare Zuppa Bella
importare tempo
importare panda COME pd
importare Rif
IL tempo E Rif i moduli fanno parte della libreria standard di Python. Quindi, non richiedono installazioni separate.
tempo aggiungerà ritardi al processo di scraping mentre Rif si occuperà di espressioni regolari.
Desideri usa Beautiful Soup per raschiare il sito web di destinazione.
Crea una funzione che invierà una richiesta HTTP GET al tuo URL di destinazione. Dovrebbe quindi recuperare il contenuto della risposta e creare un file Zuppa Bella oggetto dal contenuto HTML.
defget_soup(url, params=Nessuno, header=Nessuno):
risposta = request.get (url, params=params, headers=headers)
zuppa = BeautifulSoup (response.content, "html.parser")
ritorno minestra
Il passaggio successivo consiste nell'estrarre le informazioni dal file Zuppa Bella oggetto.
Per estrarre le informazioni necessarie per comprendere la struttura del sito Web di destinazione. Ciò comporta l'ispezione del codice HTML del sito web. Questo ti aiuterà a identificare gli elementi e gli attributi che contengono i dati che vuoi estrarre. Per ispezionare il tuo sito Web di destinazione, apri il suo collegamento in un browser Web e vai alla pagina Web che contiene i dati che desideri raschiare.
Quindi fare clic con il pulsante destro del mouse sulla pagina Web e selezionare Ispezionare dal menu contestuale. Questo aprirà gli strumenti per sviluppatori del browser.
Nel codice HTML della pagina Web, cerca gli elementi che contengono i dati che desideri raschiare. Presta attenzione ai tag, alle classi e agli attributi HTML associati ai dati di cui hai bisogno. Li userai per creare selettori per estrarre i dati usando BeautifulSoup. Nello screenshot qui sopra puoi vedere che il titolo del film è all'interno del file lister-item-header classe. Ispeziona ogni caratteristica che vuoi estrarre.
Creare una funzione che estrarrà le informazioni dal file Zuppa Bella oggetto. In questo caso, la funzione trova il titolo, la valutazione, la descrizione, il genere, la data di uscita, i registi e le star del film utilizzando tag HTML e attributi di classe appropriati.
defextract_movie_data(film):
titolo = film.find("h3", classe_="intestazione-articolo-lister").Trovare("UN").testo
valutazione = film.find("div", classe_="ratings-imdb-rating").strong.testo
descrizione = film.find("div", classe_="contenuto dell'elemento del lister").trova tutto("P")[1].text.strip()
genere_elemento = film.find("span", classe_="genere")
genere = genere_elemento.text.strip() Se genere_elemento altroNessuno
release_date = film.find("span", classe_="lister-item-year text-muted unbold").testo.strip()
director_stars = film.find("P", classe_="testo disattivato").trova tutto("UN")
direttori = [persona.testo per persona In regista_stelle[:-1]]
stelle = [persona.testo per persona In regista_stelle[-1:]]
dati_film = {
"Titolo": titolo,
"Valutazione": valutazione,
"Descrizione": descrizione,
"Genere": genere,
"Data di rilascio": data di rilascio,
"Registi": registi,
"Stelle": stelle
}
ritorno dati_film
Infine, crea una funzione che eseguirà l'effettivo raschiamento utilizzando le due funzioni precedenti. Ci vorranno l'anno e il numero massimo di film che vuoi racimolare.
defscrape_imdb_movies(anno, limite):
base_url = " https://www.imdb.com/search/title"
intestazioni = {"Accetta-lingua": "en-US, en; q=0.9"}
film = []
inizio = 1
Mentre len (film) < limite:
parametri = {
"data di rilascio": anno,
"ordinare": "num_voti, desc",
"inizio": inizio
}
soup = get_soup (base_url, params=params, headers=headers)
movie_list = soup.find_all("div", classe_="modalità elemento elenco-avanzata")
Se len (lista_film) == 0:
rottura
per film In elenco_film:
movie_data = extract_movie_data (film)
filmati.append (dati_film)
Se len (film) >= limite:
rottura
inizio += 50# IMDb mostra 50 film per pagina
tempo.sleep(1) # Aggiungi un ritardo per evitare di sovraccaricare il server
ritorno film
Poi chiama il def scrape_imdb_movies per fare il raschiamento.
# Raschia 1000 film usciti nel 2023 (o quanti ne sono disponibili)
filmati = scrape_imdb_movies(2023, 1000)
Ora hai raschiato i dati.
Il passaggio successivo consiste nel creare un set di dati da questi dati.
Creazione di un set di dati dai dati raschiati
Crea un DataFrame usando Pandas dai dati raschiati.
df = pd. DataFrame (film)
Quindi, esegui la pre-elaborazione e la pulizia dei dati. In questo caso, rimuovi le righe con valori mancanti. Quindi estrarre l'anno dalla data di rilascio e convertirlo in numerico. Rimuovi le colonne non necessarie. Converti il Valutazione da colonna a numerico. Infine, rimuovi i caratteri non alfabetici dal file Titolo colonna.
df = df.dropna()
df['Anno di pubblicazione'] = DF['Data di rilascio'].str.estratto(r'(\d{4})')
df['Anno di pubblicazione'] = pd.to_numerico (df['Anno di pubblicazione'],
errori='costringere').astype('Inter64')
df = df.drop(['Data di rilascio'], asse=1)
df['Valutazione'] = pd.to_numerico (df['Valutazione'], errori='costringere')
df['Titolo'] = DF['Titolo'].fare domanda a(lambda x: re.sub(r'\W+', ' ', X))
Memorizza i dati in un file da utilizzare successivamente nel tuo progetto.
df.to_csv("imdb_movies_dataset.csv", indice=Falso)
Infine, stampa le prime cinque righe del tuo set di dati per avere una visione di come appare.
df.head()
L'output è come mostrato nello screenshot qui sotto:
Ora hai un set di dati ottenuto tramite web scraping.
Scraping Web utilizzando altre librerie Python
Beautiful Soup non è l'unica libreria Python che puoi usare per il web scraping. Ci sono altre librerie là fuori. Ognuno con i suoi vantaggi e limiti. Cercali per scoprire quale si adatta meglio al tuo caso d'uso.