Web scraping jedna je od najboljih metoda prikupljanja podataka za prikupljanje podataka i izradu prilagođenih skupova podataka povrh toga.

Imati visokokvalitetne skupove podataka ključno je u ovoj eri donošenja odluka na temelju podataka. Iako postoje brojni javno dostupni skupovi podataka, ponekad ćete možda trebati izraditi prilagođene skupove podataka koji zadovoljavaju vaše specifične potrebe. Web scraping vam omogućuje izdvajanje podataka s web stranica. Zatim možete koristiti te podatke za izradu prilagođenog skupa podataka.

Pregled metoda prikupljanja podataka

Postoje različite metode prikupljanja podataka. Uključuju ručni unos podataka, API-je, javne skupove podataka i web skrapiranje. Svaka metoda ima svoje prednosti i ograničenja.

Ručni unos podataka oduzima puno vremena i podložan je ljudskim pogreškama, posebno za prikupljanje podataka velikih razmjera. Međutim, korisno je za prikupljanje podataka malog opsega i kada podaci nisu dostupni na druge načine.

API-ji omogućuju programerima pristup i dohvaćanje podataka na strukturiran način. Često pružaju informacije u stvarnom vremenu ili redovito ažurirane. Međutim, API pristup može biti ograničen, zahtijevati autentifikaciju ili imati ograničenja upotrebe.

Javni skupovi podataka pokrivaju širok raspon tema i domena. Oni su unaprijed prikupljeni i često dolaze u strukturiranom formatu, što ih čini lako dostupnima. Oni mogu uštedjeti vrijeme i trud kada se traženi podaci usklade s dostupnim skupovima podataka. Međutim, možda neće uvijek zadovoljiti vaše specifične potrebe ili biti ažurni.

Web scraping pruža način prikupljanja podataka s web stranica koje ne nude API-je ili imaju ograničen pristup. Omogućuje prilagodbu, skalabilnost i mogućnost prikupljanja podataka iz više izvora. Međutim, zahtijeva vještine programiranja, poznavanje strukture HTML-a i poštivanje pravnih i etičkih smjernica.

Odabir web skrapinga za prikupljanje podataka

Web scraping vam omogućuje izvlačenje informacija izravno s web stranica, dajući vam pristup širokom rasponu izvora podataka. Također vam daje kontrolu nad podacima koje želite izdvojiti i kako ih strukturirati. To olakšava prilagođavanje procesa struganja vašim specifičnim zahtjevima i izdvajanje preciznih informacija koje su vam potrebne za vaš projekt.

Identificiranje izvora podataka

Prvi korak u web scrapingu je identificiranje izvora podataka. Ovo je web mjesto koje sadrži podatke koje želite izgrebati. Prilikom odabira izvora podataka, provjerite jeste li usklađeni s uvjetima usluge izvora. Ovaj će članak koristiti IMDb (Internet Movie Database) kao izvor podataka.

Postavljanje vašeg okruženja

Postavite virtualno okruženje. Zatim pokrenite sljedeću naredbu da instalirate potrebne biblioteke.

pip instalira zahtjeve beautifulsoup4 pandas

Vi ćete koristiti zahtjevi biblioteka za upućivanje HTTP zahtjeva. lijepa juha4 za analizu HTML sadržaja i izdvajanje podataka s web stranica. Konačno ćete koristiti pande manipulirati i analizirati podatke.

Puni izvorni kod dostupan je u a GitHub spremište.

Pisanje skripte za skrapiranje weba

Uvezite instalirane biblioteke u svoju skriptu kako biste mogli koristiti funkcije koje pružaju.

uvoz zahtjevi
iz bs4 uvoz Lijepa juha
uvoz vrijeme
uvoz pande kao pd
uvoz ponovno

The vrijeme i ponovno moduli su dio Python standardne biblioteke. Stoga nisu potrebne zasebne instalacije.

vrijeme će dodati kašnjenja procesu struganja dok ponovno bavit će se regularni izrazi.

Hoćeš koristite Beautiful Soup za struganje ciljne web stranice.

Napravite funkciju koja će poslati HTTP GET zahtjev na vaš ciljni URL. Zatim bi trebao dohvatiti sadržaj odgovora i kreirati a Lijepa juha objekt iz HTML sadržaja.

defdobiti_juhu(url, parametri=Ništa, zaglavlja=Ništa):
odgovor = requests.get (url, params=params, headers=headers)
juha = Lijepa juha (response.content, "html.parser")
povratak juha

Sljedeći korak je izvlačenje informacija iz Lijepa juha objekt.

Da biste izvukli informacije, morate razumjeti strukturu ciljane web stranice. To uključuje pregled HTML koda web stranice. To će vam pomoći identificirati elemente i atribute koji sadrže podatke koje želite izdvojiti. Da biste provjerili svoju ciljnu web stranicu, otvorite njezinu vezu u web pregledniku i idite na web stranicu koja sadrži podatke koje želite skrapirati.

Zatim desnom tipkom miša kliknite web stranicu i odaberite Pregledati iz kontekstnog izbornika. Ovo će otvoriti razvojne alate preglednika.

U HTML kodu web stranice potražite elemente koji sadrže podatke koje želite skrapirati. Obratite pozornost na HTML oznake, klase i atribute povezane s podacima koji su vam potrebni. Koristit ćete ih za stvaranje selektora za izvlačenje podataka pomoću BeautifulSoupa. Na gornjoj snimci zaslona možete vidjeti da je naslov filma unutar lister-item-header razreda. Pregledajte svaku značajku koju želite izdvojiti.

Napravite funkciju koja će izvući informacije iz Lijepa juha objekt. U ovom slučaju, funkcija pronalazi naslov, ocjenu, opis, žanr, datum izlaska, redatelje i zvijezde filma koristeći odgovarajuće HTML oznake i atribute klase.

defekstrakt_podataka_filma(film):
naslov = movie.find("h3", klasa_="lister-item-header").pronaći("a").tekst
ocjena = movie.find("div", klasa_="ocjene-imdb-ocjene").jak.tekst
opis = movie.find("div", klasa_="lister-item-content").nađi_sve("p")[1].text.strip()
genre_element = movie.find("raspon", klasa_="žanr")
žanr = element_žanra.tekst.strip() ako element_žanra drugoNijedan
datum_izlaska = movie.find("raspon", klasa_="lister-item-year text-muted unbold").text.strip()
director_stars = movie.find("p", klasa_="tekst isključen").nađi_sve("a")
redatelji = [osoba.tekst za osoba u redatelj_zvijezde[:-1]]
zvijezde = [osoba.tekst za osoba u redatelj_zvijezde[-1:]]
filmski_podaci = {
"Titula": naslov,
"Ocjena": ocjena,
"Opis": opis,
"Žanr": žanr,
"Datum izlaska": Datum izlaska,
"Redatelji": redatelji,
"Zvijezde": zvijezde
}
povratak filmski_podaci

Konačno, stvorite funkciju koja će izvršiti stvarno struganje pomoću gornje dvije funkcije. Trebat će vam godina i najveći broj filmova koje želite izgrebati.

defscrape_imdb_filmovi(godina, granica):
osnovni_url = " https://www.imdb.com/search/title"
zaglavlja = {"Prihvati jezik": "en-US, hr; q=0,9"}
filmovi = []
početak = 1
dok len (filmovi) < limit:
parametri = {
"Datum izlaska": godina,
"vrsta": "broj_glasova, desc",
"početak": početak
}
supa = get_soup (osnovni_url, parametri=parametri, zaglavlja=zaglavlja)
movie_list = soup.find_all("div", klasa_="lister-item mode-advanced")
ako len (popis_filmova) == 0:
pauza
za film u popis_filmova:
movie_data = ekstrakt_movie_data (film)
movies.append (movie_data)
ako dužina (filmovi) >= ograničenje:
pauza
početak += 50# IMDb prikazuje 50 filmova po stranici
vrijeme.spavanje(1) # Dodajte odgodu kako biste izbjegli preopterećenje poslužitelja
povratak filmovi

Zatim nazovite def scrape_imdb_movies obaviti struganje.

# Scrape 1000 filmova objavljenih 2023. (ili onoliko koliko je dostupno)
filmovi = scrape_imdb_movies(2023, 1000)

Sada ste izgrebali podatke.

Sljedeći korak je stvaranje skupa podataka iz ovih podataka.

Stvaranje skupa podataka iz skrapiranih podataka

Stvorite DataFrame koristeći Pandas iz izgrebanih podataka.

df = pd. DataFrame (filmovi)

Zatim izvršite pretprocesiranje i čišćenje podataka. U tom slučaju uklonite retke s vrijednostima koje nedostaju. Zatim izdvojite godinu iz datuma izdavanja i pretvorite je u numeričku. Uklonite nepotrebne stupce. Pretvorite Ocjena stupac u numerički. Na kraju uklonite neabecedne znakove iz Titula stupac.

df = df.dropna()
df['Godina izdanja'] = df['Datum izlaska'].str.izvadak(r'(\d{4})')
df['Godina izdanja'] = pd.to_numeric (df['Godina izdanja'],
pogreške='prisiliti').astype('Int64')
df = df.drop(['Datum izlaska'], os=1)
df['Ocjena'] = pd.to_numeric (df['Ocjena'], pogreške='prisiliti')
df['Titula'] = df['Titula'].primjeni(lambda x: re.sub(r'\W+', ' ', x))

Pohranite podatke u datoteku za kasniju upotrebu u svom projektu.

df.to_csv("imdb_movies_dataset.csv", indeks=lažno)

Na kraju ispišite prvih pet redaka skupa podataka da biste vidjeli kako izgleda.

df.head()

Izlaz je kao što je prikazano na slici ispod:

Sada imate skup podataka dobiven web skrapingom.

Web skrapiranje korištenjem drugih Python biblioteka

Beautiful Soup nije jedina biblioteka Pythona koju možete koristiti za struganje weba. Postoje i druge knjižnice. Svaki sa svojim prednostima i ograničenjima. Istražite ih kako biste saznali koji najbolje odgovara vašem slučaju upotrebe.