Spletno strganje je ena najboljših metod zbiranja podatkov za zbiranje podatkov in ustvarjanje naborov podatkov po meri na njih.
Imeti visokokakovostne nabore podatkov je bistvenega pomena v tem obdobju odločanja, ki temelji na podatkih. Čeprav obstajajo številni javno dostopni nabori podatkov, boste včasih morda morali zgraditi nabore podatkov po meri, ki ustrezajo vašim posebnim potrebam. Spletno strganje vam omogoča pridobivanje podatkov s spletnih mest. Te podatke lahko nato uporabite za ustvarjanje nabora podatkov po meri.
Pregled metod zbiranja podatkov
Obstajajo različne metode zbiranja podatkov. Vključujejo ročni vnos podatkov, API-je, javne nabore podatkov in spletno strganje. Vsaka metoda ima svoje prednosti in omejitve.
Ročni vnos podatkov je dolgotrajen in podvržen človeškim napakam, zlasti pri obsežnem zbiranju podatkov. Vendar pa je v pomoč pri zbiranju podatkov majhnega obsega in kadar podatki niso na voljo na druge načine.
API-ji razvijalcem omogočajo dostop do podatkov in njihovo pridobivanje na strukturiran način. Pogosto zagotavljajo informacije v realnem času ali redno posodobljene. Vendar je lahko dostop do API-ja omejen, zahteva preverjanje pristnosti ali ima omejitve uporabe.
Javni nabori podatkov pokrivajo široko paleto tem in področij. Vnaprej so zbrani in so pogosto v strukturirani obliki, zaradi česar so lahko dostopni. Prihranijo lahko čas in trud, ko so zahtevani podatki usklajeni z razpoložljivimi nabori podatkov. Vendar morda ne pokrivajo vedno vaših posebnih potreb ali niso posodobljeni.
Spletno strganje omogoča zbiranje podatkov s spletnih mest, ki ne ponujajo API-jev ali imajo omejen dostop. Omogoča prilagajanje, razširljivost in možnost zbiranja podatkov iz več virov. Zahteva pa znanje programiranja, poznavanje strukture HTML ter spoštovanje pravnih in etičnih smernic.
Izbira spletnega strganja za zbiranje podatkov
Spletno strganje vam omogoča pridobivanje informacij neposredno s spletnih strani, kar vam omogoča dostop do številnih virov podatkov. Omogoča vam tudi nadzor nad tem, katere podatke želite ekstrahirati in kako jih strukturirati. To olajša prilagajanje postopka strganja vašim posebnim zahtevam in pridobivanje natančnih informacij, ki jih potrebujete za svoj projekt.
Prepoznavanje vira podatkov
Prvi korak pri spletnem strganju je prepoznavanje vira podatkov. To je spletno mesto, ki vsebuje podatke, ki jih želite postrgati. Ko izbirate vir podatkov, se prepričajte, da ste usklajeni s pogoji storitve vira. Ta članek bo kot vir podatkov uporabil IMDb (Internet Movie Database).
Nastavitev vašega okolja
Nastavite virtualno okolje. Nato zaženite naslednji ukaz, da namestite zahtevane knjižnice.
pip namestitev zahteva beautifulsoup4 pandas
Uporabili boste zahteve knjižnico za izdelavo zahtev HTTP. lepa juha4 za razčlenjevanje vsebine HTML in pridobivanje podatkov s spletnih strani. Končno boste uporabili pande manipulirati in analizirati podatke.
Celotna izvorna koda je na voljo v a Repozitorij GitHub.
Pisanje skripta za spletno strganje
Uvozite nameščene knjižnice v svoj skript, da boste lahko uporabljali funkcije, ki jih ponujajo.
uvoz zahteve
od bs4 uvoz BeautifulSoup
uvoz čas
uvoz pande kot pd
uvoz re
The čas in re moduli so del standardne knjižnice Python. Zato ne potrebujete ločenih namestitev.
čas bo dodal zamude pri postopku strganja, medtem ko re se bo ukvarjal s regularni izrazi.
Ti boš uporabite Beautiful Soup za strganje ciljnega spletnega mesta.
Ustvarite funkcijo, ki bo poslala zahtevo HTTP GET na vaš ciljni URL. Nato mora pridobiti vsebino odgovora in ustvariti a BeautifulSoup predmet iz vsebine HTML.
defget_soup(url, params=Brez, headers=Brez):
odgovor = requests.get (url, params=params, headers=headers)
juha = BeautifulSoup (response.content, "html.parser")
vrnitev juha
Naslednji korak je pridobivanje informacij iz BeautifulSoup predmet.
Če želite pridobiti informacije, morate razumeti strukturo ciljnega spletnega mesta. To vključuje pregled kode HTML spletnega mesta. To vam bo pomagalo prepoznati elemente in atribute, ki vsebujejo podatke, ki jih želite ekstrahirati. Če želite pregledati ciljno spletno mesto, odprite njegovo povezavo v spletnem brskalniku in se pomaknite do spletne strani, ki vsebuje podatke, ki jih želite postrgati.
Nato z desno miškino tipko kliknite spletno stran in izberite Preglejte iz kontekstnega menija. To bo odprlo orodja za razvijalce brskalnika.
V kodi HTML spletne strani poiščite elemente, ki vsebujejo podatke, ki jih želite postrgati. Bodite pozorni na oznake HTML, razrede in atribute, povezane s podatki, ki jih potrebujete. Uporabili jih boste za ustvarjanje izbirnikov za ekstrahiranje podatkov s pomočjo BeautifulSoup. Na zgornjem posnetku zaslona lahko vidite, da je naslov filma znotraj lister-item-header razred. Preglejte vsako funkcijo, ki jo želite ekstrahirati.
Ustvarite funkcijo, ki bo izvlekla informacije iz BeautifulSoup predmet. V tem primeru funkcija najde naslov, oceno, opis, žanr, datum izdaje, režiserje in zvezde filma z uporabo ustreznih oznak HTML in atributov razreda.
defizvleček_filmskih_podatkov(film):
naslov = film.najdi("h3", razred_="lister-item-header").najti("a").besedilo
ocena = film.najdi("div", razred_="ocene-imdb-ocena").močno.besedilo
opis = film.najdi("div", razred_="lister-item-content").find_all("p")[1].text.strip()
genre_element = movie.find("razpon", razred_="žanr")
žanr = genre_element.text.strip() če genre_element drugačeNoben
datum_izida = movie.find("razpon", razred_="lister-item-year text-muted unbold").text.strip()
director_stars = movie.find("p", razred_="besedilo utišano").find_all("a")
direktorji = [oseba.besedilo za oseba v direktor_zvezde[:-1]]
zvezdice = [oseba.besedilo za oseba v režiser_zvezde[-1:]]
filmski_podatki = {
"Naslov": naslov,
"ocena": ocena,
"Opis": opis,
"Žanr": žanr,
"Datum izdaje": Datum izdaje,
"Režiserji": režiserji,
"zvezde": zvezdice
}
vrnitev filmski_podatki
Končno ustvarite funkcijo, ki bo opravila dejansko strganje z uporabo zgornjih dveh funkcij. Trajalo bo leto in največje število filmov, ki jih želite postrgati.
defscrape_imdb_movies(leto, omejitev):
osnovni_url = " https://www.imdb.com/search/title"
glave = {"Sprejmi jezik": "en-US, en; q=0,9"}
filmi = []
začetek = 1
medtem len (filmi) < omejitev:
params = {
"Datum izdaje": leto,
"vrsta": "število_glasov, desc",
"začetek": začetek
}
soup = get_soup (base_url, params=params, headers=headers)
movie_list = soup.find_all("div", razred_="lister-item mode-advanced")
če len (seznam_filmov) == 0:
odmor
za film v seznam_filmov:
movie_data = izvleček_movie_data (film)
movies.append (movie_data)
če len (filmi) >= omejitev:
odmor
začetek += 50# IMDb prikazuje 50 filmov na stran
time.sleep(1) # Dodajte zakasnitev, da preprečite preobremenitev strežnika
vrnitev filmi
Potem pokličite def scrape_imdb_movies narediti strganje.
# Postrgaj 1000 filmov, izdanih leta 2023 (ali kolikor jih je na voljo)
filmi = scrape_imdb_movies(2023, 1000)
Zdaj ste postrgali podatke.
Naslednji korak je ustvariti nabor podatkov iz teh podatkov.
Ustvarjanje nabora podatkov iz postrganih podatkov
Ustvarite DataFrame z uporabo Pandas iz postrganih podatkov.
df = pd. DataFrame (filmi)
Nato opravite predhodno obdelavo in čiščenje podatkov. V tem primeru odstranite vrstice z manjkajočimi vrednostmi. Nato izvlecite leto iz datuma izdaje in ga pretvorite v številko. Odstranite nepotrebne stolpce. Pretvori Ocena stolpca v številsko. Na koncu odstranite neabecedne znake iz Naslov stolpec.
df = df.dropna()
df['Leto izdaje'] = df['Datum izdaje'].str.izvleček(r'(\d{4})')
df['Leto izdaje'] = pd.to_numeric (df['Leto izdaje'],
napake='prisiliti').astype('Int64')
df = df.drop(['Datum izdaje'], os=1)
df['Ocena'] = pd.to_numeric (df['Ocena'], napake='prisiliti')
df['Naslov'] = df['Naslov'].uporabi(lambda x: re.sub(r'\W+', ' ', x))
Shranite podatke v datoteko za kasnejšo uporabo v svojem projektu.
df.to_csv("imdb_movies_dataset.csv", indeks=False)
Nazadnje natisnite prvih pet vrstic nabora podatkov, da si ogledate, kako izgleda.
df.head()
Rezultat je prikazan na spodnjem posnetku zaslona:
Zdaj imate nabor podatkov, pridobljen s spletnim strganjem.
Spletno strganje z uporabo drugih knjižnic Python
Beautiful Soup ni edina knjižnica Python, ki jo lahko uporabite za spletno strganje. Tam so še druge knjižnice. Vsak s svojimi prednostmi in omejitvami. Raziščite jih in ugotovite, kateri najbolj ustreza vašemu primeru uporabe.