Web scraping este una dintre cele mai bune metode de colectare a datelor pentru a colecta date și a construi seturi de date personalizate pe deasupra.

A avea seturi de date de înaltă calitate este esențială în această eră a luării deciziilor bazate pe date. Deși există numeroase seturi de date disponibile public, uneori poate fi necesar să construiți seturi de date personalizate care să răspundă nevoilor dvs. specifice. Web scraping vă permite să extrageți date de pe site-uri web. Apoi puteți utiliza aceste date pentru a vă crea setul de date personalizat.

Prezentare generală a metodelor de colectare a datelor

Există diferite metode de colectare a datelor. Acestea includ introducerea manuală a datelor, API-uri, seturi de date publice și web scraping. Fiecare metodă are avantajele și limitările sale.

Introducerea manuală a datelor necesită timp și este predispusă la erori umane, în special pentru colectarea datelor la scară largă. Cu toate acestea, este util pentru colectarea de date la scară mică și atunci când datele nu sunt disponibile prin alte mijloace.

instagram viewer

API-urile permit dezvoltatorilor să acceseze și să recupereze datele într-un mod structurat. Ele oferă adesea informații în timp real sau actualizate regulat. Cu toate acestea, accesul API poate fi limitat, poate necesita autentificare sau are restricții de utilizare.

Seturile de date publice acoperă o gamă largă de subiecte și domenii. Sunt colectate în prealabil și deseori vin într-un format structurat, făcându-le ușor accesibile. Ele pot economisi timp și efort atunci când datele necesare se aliniază cu seturile de date disponibile. Cu toate acestea, este posibil ca acestea să nu acopere întotdeauna nevoile dvs. specifice sau să fie actualizate.

Web scraping oferă o modalitate de a colecta date de pe site-uri web care nu oferă API-uri sau au acces limitat. Permite personalizare, scalabilitate și capacitatea de a colecta date din mai multe surse. Cu toate acestea, necesită abilități de programare, cunoaștere a structurii HTML și aderarea la liniile directoare legale și etice.

Alegerea Web Scraping pentru colectarea datelor

Web scraping vă permite să extrageți informații direct din paginile web, oferindu-vă acces la o gamă largă de surse de date. De asemenea, vă oferă control asupra datelor pe care să le extrageți și cum să le structurați. Acest lucru facilitează adaptarea procesului de răzuire pentru a răspunde cerințelor dumneavoastră specifice și a extrage informațiile precise de care aveți nevoie pentru proiectul dumneavoastră.

Identificarea sursei de date

Primul pas în web scraping este identificarea sursei de date. Acesta este site-ul web care conține datele pe care doriți să le răzuiți. Atunci când alegeți sursa de date, asigurați-vă că vă aliniați cu termenii și condițiile sursei. Acest articol va folosi IMDb (Internet Movie Database) ca sursă de date.

Configurarea mediului

Configurați un mediu virtual. Apoi rulați următoarea comandă pentru a instala bibliotecile necesare.

pip install solicită beautifulsoup4 panda

Veți folosi cereri bibliotecă pentru a face cereri HTTP. supa frumoasa4 pentru a analiza conținutul HTML și a extrage date din pagini web. În cele din urmă, vei folosi panda pentru a manipula și analiza datele.

Codul sursă complet este disponibil în a Depozitul GitHub.

Scrierea scriptului Web Scraping

Importă bibliotecile instalate în scriptul tău pentru a putea folosi funcțiile pe care le oferă.

import cereri
din bs4 import Frumoasa Supa
import timp
import panda la fel de pd
import re

The timp și re modulele fac parte din biblioteca standard Python. Prin urmare, nu necesită instalații separate.

timp va adăuga întârzieri procesului de răzuire în timp ce re se va ocupa de expresii obisnuite.

Veți utilizați Beautiful Soup pentru a răzui site-ul țintă.

Creați o funcție care va trimite o solicitare HTTP GET către adresa URL țintă. Ar trebui apoi să preia conținutul răspunsului și să creeze a Frumoasa Supa obiect din conținutul HTML.

defobţine_supă(url, parametri=Niciuna, antete=Niciuna):
răspuns = requests.get (url, params=params, headers=headers)
supă = BeautifulSoup (response.content, „html.parser”)
întoarcere supă

Următorul pas este extragerea informațiilor din Frumoasa Supa obiect.

Pentru a extrage informațiile, aveți nevoie pentru a înțelege structura site-ului dvs. țintă. Aceasta implică inspectarea codului HTML al site-ului web. Acest lucru vă va ajuta să identificați elementele și atributele care conțin datele pe care doriți să le extrageți. Pentru a vă inspecta site-ul țintă, deschideți linkul acestuia într-un browser web și navigați la pagina web care conține datele pe care doriți să le extrageți.

Apoi faceți clic dreapta pe pagina web și selectați Inspecta din meniul contextual. Aceasta va deschide instrumentele de dezvoltare ale browserului.

În codul HTML al paginii web, căutați elemente care conțin datele pe care doriți să le răzuiți. Acordați atenție etichetelor HTML, claselor și atributelor asociate cu datele de care aveți nevoie. Le vei folosi pentru a crea selectoare pentru extragerea datelor folosind BeautifulSoup. În captura de ecran de mai sus puteți vedea că titlul filmului este în interiorul lister-item-header clasă. Inspectați fiecare caracteristică pe care doriți să o extrageți.

Creați o funcție care va extrage informații din Frumoasa Supa obiect. În acest caz, funcția găsește titlul, evaluarea, descrierea, genul, data lansării, regizorii și vedetele filmului folosind etichete HTML și atribute de clasă adecvate.

defextrage_date_movie(film):
titlu = movie.find("h3", clasa_="antet-articol-liste").găsi("A").text
rating = movie.find("div", clasa_=„evaluări-imdb-evaluare”).text puternic
descriere = movie.find("div", clasa_=„Lister-element-conținut”).Găsiți toate("p")[1].text.strip()
element_gen = movie.find("span", clasa_="gen")
gen = genre_element.text.strip() dacă element_gen altfelNici unul
data_lansării = movie.find("span", clasa_=„Lister-element-an text-dezactivat fără bold”).text.strip()
director_stars = movie.find("p", clasa_=„text dezactivat”).Găsiți toate("A")
directori = [persoana.text pentru persoană în director_stars[:-1]]
stele = [persoană.text pentru persoană în regizor_stars[-1:]]
date_film = {
"Titlu": titlu,
"Evaluare": evaluare,
"Descriere": Descriere,
"gen": gen,
"Data de lansare": Data de lansare,
„Directori”: directori,
"Stele": stele
}
întoarcere date_film

În cele din urmă, creați o funcție care va face răzuirea reală folosind cele două funcții de mai sus. Va dura anul și numărul maxim de filme pe care doriți să le scoateți.

defscrape_imdb_movies(an, limită):
baza_url = " https://www.imdb.com/search/title"
antete = {„Accept-Limba”: „en-US, en; q=0,9"}
filme = []
începe = 1
in timp ce len (filme) < limit:
parametri = {
"Data de lansare": an,
"fel": „num_voturi, desc”,
"start": start
}
supă = get_soup (base_url, params=params, headers=headers)
lista_filme = sup.find_all("div", clasa_=„mod de listă-articol-avansat”)
dacă len (listă_filme) == 0:
pauză
pentru film în lista_filme:
movie_data = extract_movie_data (film)
movies.append (datele_movie)
dacă len (filme) >= limit:
pauză
începe += 50# IMDb afișează 50 de filme pe pagină
timp.somn(1) # Adăugați o întârziere pentru a evita copleșirea serverului
întoarcere filme

Apoi sunați la def scrape_imdb_movies pentru a face răzuirea.

# Scrape 1000 de filme lansate în 2023 (sau câte sunt disponibile)
filme = scrape_imdb_movies(2023, 1000)

Acum ați eliminat datele.

Următorul pas este crearea unui set de date din aceste date.

Crearea unui set de date din datele răzuite

Creați un DataFrame folosind Pandas din datele răzuite.

df = pd. DataFrame (filme)

Apoi, faceți preprocesarea și curățarea datelor. În acest caz, eliminați rândurile cu valori lipsă. Apoi extrageți anul de la data lansării și convertiți-l în cifre. Eliminați coloanele inutile. Convertiți Evaluare coloană la numeric. În cele din urmă, eliminați caracterele non-alfabetice din Titlu coloană.

df = df.dropna()
df['Anul lansării'] = df['Data de lansare'].str.extract(r'(\d{4})')
df['Anul lansării'] = pd.to_numeric (df['Anul lansării'],
erori='constrânge').astype(„Int64”)
df = df.drop(['Data de lansare'], axa=1)
df[„Evaluare”] = pd.to_numeric (df[„Evaluare”], erori='constrânge')
df['Titlu'] = df['Titlu'].aplica(lambda x: re.sub(r'\W+', ' ', X))

Stocați datele într-un fișier pentru a le utiliza ulterior în proiect.

df.to_csv(„imdb_movies_dataset.csv”, index=Fals)

În cele din urmă, imprimați primele cinci rânduri ale setului de date pentru a avea o vedere a modului în care arată.

df.head()

Ieșirea este așa cum se arată în captura de ecran de mai jos:

Acum aveți un set de date obținut prin web scraping.

Web Scraping folosind alte biblioteci Python

Beautiful Soup nu este singura bibliotecă Python pe care o puteți folosi pentru web scraping. Există și alte biblioteci acolo. Fiecare cu propriile avantaje și limitări. Cercetează-le pentru a afla care dintre ele se potrivește cel mai bine cazului tău de utilizare.