Veebikraapimine on üks parimaid andmekogumismeetodeid andmete kogumiseks ja nende peale kohandatud andmekogumite loomiseks.
Kvaliteetsete andmekogumite omamine on praegusel andmepõhise otsustusprotsessi ajastul hädavajalik. Kuigi on palju avalikult kättesaadavaid andmekogumeid, võib mõnikord tekkida vajadus luua kohandatud andmekogumid, mis vastavad teie konkreetsetele vajadustele. Veebi kraapimine võimaldab teil veebisaitidelt andmeid ekstraheerida. Seejärel saate neid andmeid kasutada kohandatud andmestiku loomiseks.
Andmekogumismeetodite ülevaade
Andmete kogumise meetodeid on erinevaid. Need hõlmavad käsitsi andmete sisestamist, API-sid, avalikke andmekogumeid ja veebikraapimist. Igal meetodil on oma eelised ja piirangud.
Andmete käsitsi sisestamine on aeganõudev ja inimlike vigade oht, eriti suuremahuliste andmete kogumise korral. Siiski on see abiks väikesemahulise andmete kogumise korral ja siis, kui andmed pole muudel viisidel kättesaadavad.
API-d võimaldavad arendajatel struktureeritud viisil andmetele juurde pääseda ja neid hankida. Need pakuvad sageli reaalajas või regulaarselt uuendatavat teavet. API-juurdepääs võib aga olla piiratud, nõuda autentimist või omada kasutuspiiranguid.
Avalikud andmestikud hõlmavad paljusid teemasid ja valdkondi. Need on eelnevalt kogutud ja tulevad sageli struktureeritud vormingus, muutes need hõlpsasti juurdepääsetavaks. Need võivad säästa aega ja vaeva, kui nõutavad andmed ühtivad saadaolevate andmekogumitega. Kuid need ei pruugi alati katta teie konkreetseid vajadusi ega olla ajakohased.
Veebi kraapimine võimaldab koguda andmeid veebisaitidelt, mis ei paku API-sid või millel on piiratud juurdepääs. See võimaldab kohandamist, skaleeritavust ja võimalust koguda andmeid mitmest allikast. See eeldab aga programmeerimisoskusi, HTML-i struktuuri tundmist ning juriidiliste ja eetiliste juhiste järgimist.
Veebi kraapimise valimine andmete kogumiseks
Veebi kraapimine võimaldab teil teavet otse veebilehtedelt eraldada, pakkudes juurdepääsu paljudele andmeallikatele. Samuti annab see teile kontrolli, milliseid andmeid ekstraheerida ja kuidas neid struktureerida. See muudab kraapimisprotsessi kohandamise teie konkreetsetele nõuetele vastavaks ja projekti jaoks vajaliku täpse teabe hankimise lihtsaks.
Andmeallika tuvastamine
Veebi kraapimise esimene samm on andmeallika tuvastamine. See on veebisait, mis sisaldab andmeid, mida soovite kraapida. Andmeallika valimisel järgige kindlasti allika teenusetingimusi. See artikkel kasutab andmeallikana IMDb-d (Internet Movie Database).
Oma keskkonna seadistamine
Seadistage virtuaalne keskkond. Seejärel käivitage vajalike teekide installimiseks järgmine käsk.
pip install nõuab beautifulsoup4 pandasid
Sa kasutad taotlusi HTTP-päringute tegemiseks. ilus supp4 HTML-i sisu sõelumiseks ja andmete eraldamiseks veebilehtedelt. Lõpuks kasutate pandad andmetega manipuleerimiseks ja analüüsimiseks.
Täielik lähtekood on saadaval a GitHubi hoidla.
Veebi kraapimisskripti kirjutamine
Importige installitud teegid oma skripti, et saaksite kasutada nende pakutavaid funktsioone.
importida taotlusi
alates bs4 importida Ilus supp
importida aega
importida pandad nagu pd
importida re
The aega ja re moodulid on osa Pythoni standardteegist. Seetõttu ei ole vaja eraldi paigaldust.
aega lisab kraapimisprotsessi viivitusi re tegeleb regulaaravaldised.
Saate seda teha kasutage sihtveebisaidi kraapimiseks kaunist suppi.
Looge funktsioon, mis saadab teie siht-URL-ile HTTP GET-päringu. Seejärel peaks see otsima vastuse sisu ja looma a Ilus supp objekt HTML-i sisust.
defhanki_supp(url, params = Puudub, headers = Puudub):
vastus = requests.get (url, params=params, headers=headers)
supp = BeautifulSoup (response.content, "html.parser")
tagasi supp
Järgmine samm on teabe hankimine Ilus supp objektiks.
Teabe hankimiseks peate mõistma oma sihtveebisaidi struktuuri. See hõlmab veebisaidi HTML-koodi kontrollimist. See aitab teil tuvastada elemendid ja atribuudid, mis sisaldavad andmeid, mida soovite ekstraktida. Sihtveebisaidi kontrollimiseks avage selle link veebibrauseris ja navigeerige veebilehele, mis sisaldab andmeid, mida soovite kraapida.
Seejärel paremklõpsake veebilehel ja valige Kontrollige kontekstimenüüst. See avab brauseri arendaja tööriistad.
Otsige veebilehe HTML-koodist elemente, mis sisaldavad andmeid, mida soovite kraapida. Pöörake tähelepanu vajalike andmetega seotud HTML-i siltidele, klassidele ja atribuutidele. Kasutate neid valijate loomiseks andmete ekstraktimiseks BeautifulSoupi abil. Ülaltoodud ekraanipildil näete, et filmi pealkiri on sees lister-item-header klass. Kontrollige kõiki funktsioone, mida soovite ekstraktida.
Looge funktsioon, mis eraldab teabest Ilus supp objektiks. Sel juhul leiab funktsioon vastavate HTML-i siltide ja klassiatribuutide abil filmi pealkirja, hinnangu, kirjelduse, žanri, väljalaskekuupäeva, režissöörid ja staarid.
defekstrakti_filmi_andmed(Film):
pealkiri = film.find("h3", klass_="lister-item-header").leia("a").tekst
hinnang = film.find("div", klass_="reitingud-imdb-reiting").tugev.tekst
kirjeldus = film.find("div", klass_="nimekirja-üksuse-sisu").find_all("p")[1].text.strip()
žanri_element = film.find("span", klass_="žanr")
žanr = žanri_element.tekst.riba() kui žanri_element muiduMitte ühtegi
release_date = movie.find("span", klass_="lister-item-year text-muted unbold").text.strip()
director_stars = film.find("p", klass_="tekst vaigistatud").find_all("a")
direktorid = [isik.tekst jaoks inimene sisse lavastaja_staarid[:-1]]
tähed = [inimene.tekst jaoks inimene sisse lavastaja_staarid[-1:]]
filmi_andmed = {
"Pealkiri": pealkiri,
"Hinnang": hinnang,
"Kirjeldus": kirjeldus,
"Žanr": žanr,
"Väljalaske kuupäev": väljalaske kuupäev,
"Režissöörid": lavastajad,
"Tähed": tähed
}
tagasi filmi_andmed
Lõpuks looge funktsioon, mis teostab tegeliku kraapimise, kasutades ülaltoodud kahte funktsiooni. Selleks kulub aasta ja maksimaalne arv filme, mida soovite kraapida.
defscrape_imdb_movies(aasta, limiit):
baas_url = " https://www.imdb.com/search/title"
päised = {"Nõustu-keel": "en-US, en; q = 0,9"}
filmid = []
algus = 1
samas len (filmid) < limiit:
params = {
"väljalaske kuupäev": aasta,
"sorteeri": "häälte_arv, langus",
"alusta": alusta
}
supp = hanki_supp (base_url, params=params, headers=headers)
movie_list = supp.find_all("div", klass_="lister-item mode-advanced")
kui len (filmide_loend) == 0:
murda
jaoks Film sisse movie_list:
movie_data = ekstrakti_filmi_andmed (film)
movies.append (movie_data)
kui len (filmid) >= piirang:
murda
alusta += 50# IMDb kuvab 50 filmi lehel
time.sleep(1) # Lisage viivitus, et vältida serveri ülekoormamist
tagasi filmid
Seejärel helistage def scrape_imdb_movies kraapimist tegema.
# Scrape 1000 filmi, mis ilmusid 2023. aastal (või nii palju kui saadaval)
filmid = scrape_imdb_movies(2023, 1000)
Olete nüüd andmed kraapinud.
Järgmine samm on nendest andmetest andmestiku loomine.
Andmestiku loomine kraabitud andmetest
Looge Pandade abil DataFrame kraabitud andmetest.
df = pd. DataFrame (filmid)
Seejärel tehke andmete eeltöötlus ja puhastamine. Sel juhul eemaldage puuduvate väärtustega read. Seejärel eraldage väljalaskekuupäevast aasta ja teisendage see numbriteks. Eemaldage mittevajalikud veerud. Teisendage Hinnang veerust numbriteks. Lõpuks eemaldage failist mittetähestikulised märgid Pealkiri veerg.
df = df.dropna()
df["Väljalaskmise aasta"] = df['Väljalaske kuupäev'].str.extract(r'(\d{4})')
df["Väljalaskmise aasta"] = pd.to_numeric (df["Väljalaskmise aasta"],
vead='sundima').astype("Int64")
df = df.drop(['Väljalaske kuupäev'], telg=1)
df['Hinnang'] = pd.to_numeric (df['Hinnang'], vead='sundima')
df["Pealkiri"] = df["Pealkiri"].apply(lambda x: re.sub(r'\W+', ' ', x))
Salvestage andmed faili, et neid hiljem oma projektis kasutada.
df.to_csv("imdb_movies_dataset.csv", indeks=Vale)
Lõpuks printige oma andmestiku esimesed viis rida, et näha, kuidas see välja näeb.
df.head()
Väljund on selline, nagu on näidatud alloleval ekraanipildil:
Nüüd on teil veebikraapimise teel saadud andmestik.
Veebi kraapimine teiste Pythoni teekide abil
Beautiful Soup ei ole ainus Pythoni teek, mida saate veebi kraapimiseks kasutada. Seal on teisigi raamatukogusid. Igal neist on oma eelised ja piirangud. Uurige neid, et teada saada, milline neist teie kasutusjuhtumitele kõige paremini sobib.