A webes kaparás az egyik legjobb adatgyűjtési módszer az adatok gyűjtésére és egyedi adatkészletek létrehozására.

A jó minőségű adatkészletek elengedhetetlenek az adatvezérelt döntéshozatal korszakában. Noha számos nyilvánosan elérhető adatkészlet létezik, előfordulhat, hogy egyedi adatkészleteket kell létrehoznia, amelyek megfelelnek az Ön egyedi igényeinek. A webkaparás lehetővé teszi adatok kinyerését a webhelyekről. Ezeket az adatokat ezután felhasználhatja egyéni adatkészlet létrehozásához.

Az adatgyűjtési módszerek áttekintése

Különféle adatgyűjtési módszerek léteznek. Ezek közé tartozik a kézi adatbevitel, az API-k, a nyilvános adatkészletek és a webes kaparás. Mindegyik módszernek megvannak a maga előnyei és korlátai.

A kézi adatbevitel időigényes, és emberi hibákra is hajlamos, különösen nagyszabású adatgyűjtés esetén. Hasznos azonban kis léptékű adatgyűjtésnél, és akkor, ha az adatok más módon nem érhetők el.

Az API-k lehetővé teszik a fejlesztők számára az adatok strukturált elérését és lekérését. Gyakran valós idejű vagy rendszeresen frissített információkat nyújtanak. Előfordulhat azonban, hogy az API-hozzáférés korlátozott, hitelesítést igényel, vagy használati korlátozások vonatkozhatnak.

instagram viewer

A nyilvános adatkészletek témák és tartományok széles skáláját fedik le. Előre összegyűjtöttük, és gyakran strukturált formátumban érkeznek, így könnyen hozzáférhetőek. Időt és erőfeszítést takaríthatnak meg, ha a szükséges adatok igazodnak a rendelkezésre álló adatkészletekhez. Előfordulhat azonban, hogy nem mindig felelnek meg az Ön egyedi igényeinek, vagy nem mindig naprakészek.

A webkaparás lehetővé teszi az API-t nem kínáló vagy korlátozott hozzáférésű webhelyekről származó adatok gyűjtését. Lehetővé teszi a testreszabhatóságot, a méretezhetőséget és a több forrásból származó adatgyűjtés lehetőségét. Ehhez azonban programozási ismeretek, a HTML-struktúra ismerete, valamint a jogi és etikai irányelvek betartása szükséges.

A Webes Scraping kiválasztása adatgyűjtéshez

A webkaparás lehetővé teszi, hogy információkat nyerjen ki közvetlenül a weboldalakról, így hozzáférést biztosít az adatforrások széles skálájához. Azt is szabályozhatja, hogy milyen adatokat kell kivonni, és hogyan strukturálhatja azokat. Ez megkönnyíti a kaparási folyamat testreszabását, hogy megfeleljen az egyedi követelményeknek, és kinyerje a projekthez szükséges pontos információkat.

Az adatforrás azonosítása

A webkaparás első lépése az adatforrás azonosítása. Ez az a webhely, amely tartalmazza a lemásolni kívánt adatokat. Az adatforrás kiválasztásakor ügyeljen arra, hogy megfeleljen a forrás szolgáltatási feltételeinek. Ez a cikk az IMDb-t (Internet Movie Database) fogja használni adatforrásként.

Környezetének beállítása

Állítson be egy virtuális környezetet. Ezután futtassa a következő parancsot a szükséges könyvtárak telepítéséhez.

pip telepítési kérelmek beautifulsoup4 pandas

Használni fogja a kéréseket könyvtárat a HTTP-kérésekhez. gyönyörű leves4 HTML tartalom elemzéséhez és adatok kinyeréséhez a weboldalakról. Végül használni fogod pandák adatok manipulálására és elemzésére.

A teljes forráskód elérhető a GitHub adattár.

A Web Scraping Script írása

Importálja a telepített könyvtárakat a szkriptbe, hogy használni tudja az általuk biztosított funkciókat.

import kéréseket
tól től bs4 import Gyönyörű leves
import idő
import pandák mint pd
import újra

A idő és újra modulok a Python szabványkönyvtár részei. Ezért nincs szükség külön telepítésre.

idő késedelmet okoz a kaparási folyamatban újra foglalkozni fog reguláris kifejezések.

Fogsz használja a Beautiful Soup-ot a célwebhely lekaparásához.

Hozzon létre egy függvényt, amely HTTP GET kérést küld a cél URL-re. Ezután le kell kérnie a válasz tartalmát, és létre kell hoznia a Gyönyörű leves objektumot a HTML-tartalomból.

defget_sup(url, params=Nincs, headers=Nincs):
válasz = requests.get (url, params=params, headers=headers)
leves = BeautifulSoup (response.content, "html.parser")
Visszatérés leves

A következő lépés az információk kinyerése a Gyönyörű leves tárgy.

Az információk kinyeréséhez meg kell értenie a célwebhely szerkezetét. Ez magában foglalja a webhely HTML-kódjának ellenőrzését. Ez segít azonosítani azokat az elemeket és attribútumokat, amelyek a kinyerni kívánt adatokat tartalmazzák. A célwebhely ellenőrzéséhez nyissa meg a hivatkozását egy webböngészőben, és keresse meg a kimásolni kívánt adatokat tartalmazó weboldalt.

Ezután kattintson a jobb gombbal a weboldalra, és válassza ki Vizsgálja meg a helyi menüből. Ez megnyitja a böngésző fejlesztői eszközeit.

A weboldal HTML-kódjában keresse meg azokat az elemeket, amelyek a kimásolni kívánt adatokat tartalmazzák. Ügyeljen a szükséges adatokhoz társított HTML-címkékre, osztályokra és attribútumokra. Ezek segítségével kiválasztókat hozhat létre az adatok kinyeréséhez a BeautifulSoup segítségével. A fenti képernyőképen látható, hogy a film címe a lister-elem-fejléc osztály. Vizsgálja meg az összes kivonni kívánt jellemzőt.

Hozzon létre egy függvényt, amely információkat nyer ki a Gyönyörű leves tárgy. Ebben az esetben a függvény a megfelelő HTML-címkék és osztályattribútumok segítségével megtalálja a film címét, értékelését, leírását, műfaját, megjelenési dátumát, rendezőit és sztárjait.

defkivonat_film_adat(film):
title = movie.find("h3", class_="lista-elem-fejléc").megtalálja("a").szöveg
értékelés = movie.find("div", class_="ratings-imdb-rating").erős.szöveg
leírás = film.find("div", class_="lista-elem-tartalom").Találd meg mindet("p")[1].text.strip()
műfaj_elem = movie.find("span", class_="műfaj")
műfaj = műfaj_elem.szöveg.csík() ha műfaj_elem másEgyik sem
release_date = movie.find("span", class_="lister-item-year text-muted unbold").text.strip()
rendező_sztárok = film.find("p", class_="szöveg elnémítva").Találd meg mindet("a")
igazgatók = [személy.szöveg számára személy ban ben rendező_sztárok[:-1]]
csillagok = [személy.szöveg számára személy ban ben rendező_sztárok[-1:]]
movie_data = {
"Cím": cím,
"Értékelés": értékelés,
"Leírás": leírás,
"Műfaj": műfaj,
"Kiadási dátum": kiadási dátum,
"rendezők": rendezők,
"Csillagok": csillagok
}
Visszatérés film_adatai

Végül hozzon létre egy függvényt, amely elvégzi a tényleges kaparást a fenti két függvény használatával. A kimásolni kívánt filmek évére és maximális számára van szükség.

defscrape_imdb_movies(év, határ):
base_url = " https://www.imdb.com/search/title"
fejlécek = {"Accept-Language": "en-US, en; q=0,9"}
filmek = []
kezdés = 1
míg len (filmek) < limit:
params = {
"kiadási dátum": év,
"fajta": "szavazatok száma, desc",
"Rajt": Rajt
}
leves = get_soup (base_url, params=params, headers=headers)
movie_list = soup.find_all("div", class_="lista-elem mód-haladó")
ha len (filmlista) == 0:
szünet
számára film ban ben movie_list:
movie_data = kivonat_filmadatok (film)
movies.append (movie_data)
ha len (filmek) >= limit:
szünet
start += 50# Az IMDb oldalanként 50 filmet jelenít meg
time.sleep(1) # Adjon hozzá késleltetést, hogy elkerülje a szerver túlterhelését
Visszatérés filmeket

Ezután hívja a def scrape_imdb_movies hogy elvégezze a kaparást.

# 2023-ban megjelent Scrape 1000 film (vagy annyi, amennyi elérhető)
filmek = scrape_imdb_movies(2023, 1000)

Most kimásolta az adatokat.

A következő lépés egy adatkészlet létrehozása ezekből az adatokból.

Adatkészlet létrehozása a lekapart adatokból

Hozzon létre egy DataFrame-et a Pandas segítségével a kikapart adatokból.

df = pd. DataFrame (filmek)

Ezután végezze el az adatok előfeldolgozását és tisztítását. Ebben az esetben távolítsa el a hiányzó értékeket tartalmazó sorokat. Ezután vegye ki az évet a kiadás dátumából, és alakítsa át numerikussá. Távolítsa el a felesleges oszlopokat. Konvertálja a Értékelés oszlopból numerikussá. Végül távolítsa el a nem alfabetikus karaktereket a Cím oszlop.

df = df.dropna()
df["Kiadás éve"] = df['Kiadási dátum'].str.extract(r'(\d{4})')
df["Kiadás éve"] = pd.to_numeric (df["Kiadás éve"],
hibák='kényszer').astype("Int64")
df = df.drop(['Kiadási dátum'], tengely=1)
df['Értékelés'] = pd.to_numeric (df['Értékelés'], errors='kényszer')
df['Cím'] = df['Cím'].alkalmaz(lambda x: re.sub(r'\W+', ' ', x))

Tárolja az adatokat egy fájlban, hogy később felhasználhassa a projektben.

df.to_csv("imdb_movies_dataset.csv", index=Hamis)

Végül nyomtassa ki az adatkészlet első öt sorát, hogy megtekinthesse, hogyan néz ki.

df.head()

A kimenet az alábbi képernyőképen látható:

Most már rendelkezik egy webes lekaparással kapott adatkészlettel.

Webkaparás más Python-könyvtárak használatával

A Beautiful Soup nem az egyetlen Python-könyvtár, amelyet webkaparáshoz használhat. Vannak más könyvtárak is. Mindegyiknek megvannak a maga előnyei és korlátai. Kutassa őket, hogy megtudja, melyik felel meg leginkább az Ön használati esetének.