Web scraping je jednou z nejlepších metod sběru dat pro shromažďování dat a vytváření vlastních datových sad nad nimi.
Mít vysoce kvalitní datové sady je v této éře rozhodování založeného na datech zásadní. Přestože existuje mnoho veřejně dostupných datových sad, někdy může být nutné vytvořit vlastní datové sady, které splňují vaše specifické potřeby. Web scraping vám umožňuje extrahovat data z webových stránek. Tato data pak můžete použít k vytvoření vlastní datové sady.
Přehled metod sběru dat
Existují různé metody sběru dat. Zahrnují ruční zadávání dat, API, veřejné datové sady a web scraping. Každá metoda má své výhody a omezení.
Manuální zadávání dat je časově náročné a náchylné k lidským chybám, zejména při shromažďování dat ve velkém měřítku. Je však užitečné pro sběr dat v malém měřítku a v případě, že data nejsou dostupná jinými prostředky.
Rozhraní API umožňují vývojářům přistupovat k datům a získávat je strukturovaným způsobem. Často poskytují informace v reálném čase nebo pravidelně aktualizované informace. Přístup k rozhraní API však může být omezený, může vyžadovat ověření nebo mít omezení použití.
Veřejné datové sady pokrývají širokou škálu témat a domén. Jsou předem shromážděny a často přicházejí ve strukturovaném formátu, takže jsou snadno dostupné. Mohou ušetřit čas a námahu, když se požadovaná data shodují s dostupnými datovými sadami. Nemusí však vždy pokrýt vaše specifické potřeby nebo být aktuální.
Web scraping poskytuje způsob, jak shromažďovat data z webových stránek, které nenabízejí rozhraní API nebo mají omezený přístup. Umožňuje přizpůsobení, škálovatelnost a možnost shromažďovat data z více zdrojů. Vyžaduje však znalosti programování, znalost struktury HTML a dodržování právních a etických zásad.
Výběr Web Scraping pro sběr dat
Web scraping vám umožňuje extrahovat informace přímo z webových stránek, což vám poskytuje přístup k široké škále zdrojů dat. Také vám dává kontrolu nad tím, jaká data extrahovat a jak je strukturovat. To usnadňuje přizpůsobení procesu škrábání tak, aby vyhovoval vašim specifickým požadavkům, a extrahování přesných informací, které pro svůj projekt potřebujete.
Identifikace zdroje dat
Prvním krokem ve webovém scrapingu je identifikace zdroje dat. Toto je webová stránka, která obsahuje data, která chcete odstranit. Při výběru zdroje dat se ujistěte, že souhlasíte se smluvními podmínkami zdroje. Tento článek použije jako zdroj dat IMDb (Internet Movie Database).
Nastavení vašeho prostředí
Nastavte virtuální prostředí. Poté spusťte následující příkaz k instalaci požadovaných knihoven.
Požadavky na instalaci pip beautifulsoup4 pandas
Budete používat žádosti knihovny pro vytváření požadavků HTTP. krásná polévka4 analyzovat obsah HTML a extrahovat data z webových stránek. Nakonec použijete pandy manipulovat a analyzovat data.
Úplný zdrojový kód je k dispozici v a úložiště GitHub.
Psaní skriptu pro škrábání webu
Importujte nainstalované knihovny do skriptu, abyste mohli používat funkce, které poskytují.
import žádosti
z bs4 import Krásná polévka
import čas
import pandy tak jako pd
import re
The čas a re moduly jsou součástí standardní knihovny Pythonu. Proto nevyžadují samostatné instalace.
čas přidá zpoždění do procesu škrábání, zatímco re bude řešit regulární výrazy.
Budeš použijte Krásná polévka k seškrábání cílové webové stránky.
Vytvořte funkci, která odešle požadavek HTTP GET na vaši cílovou adresu URL. Poté by měl načíst obsah odpovědi a vytvořit a Krásná polévka objekt z obsahu HTML.
defget_soup(url, params=None, headers=None):
response = request.get (url, params=params, headers=headers)
polévka = BeautifulSoup (response.content, "html.parser")
vrátit se polévka
Dalším krokem je extrahování informací z Krásná polévka objekt.
Chcete-li získat informace, musíte porozumět struktuře cílového webu. To zahrnuje kontrolu HTML kódu webové stránky. To vám pomůže identifikovat prvky a atributy, které obsahují data, která chcete extrahovat. Chcete-li zkontrolovat svůj cílový web, otevřete jeho odkaz ve webovém prohlížeči a přejděte na webovou stránku, která obsahuje data, která chcete seškrábat.
Poté klikněte pravým tlačítkem na webovou stránku a vyberte Kontrolovat z kontextové nabídky. Otevře se vývojářské nástroje prohlížeče.
V kódu HTML webové stránky vyhledejte prvky obsahující data, která chcete seškrábat. Věnujte pozornost HTML tagům, třídám a atributům spojeným s daty, která potřebujete. Budete je používat k vytváření selektorů pro extrahování dat pomocí BeautifulSoup. Na snímku obrazovky výše můžete vidět, že název filmu je uvnitř lister-item-header třída. Zkontrolujte každý prvek, který chcete extrahovat.
Vytvořte funkci, která bude extrahovat informace z Krásná polévka objekt. V tomto případě funkce vyhledá název, hodnocení, popis, žánr, datum vydání, režiséry a hvězdy filmu pomocí příslušných značek HTML a atributů třídy.
defextrahovat_filmová_data(film):
title = movie.find("h3", třída_="lister-item-header").nalézt("A").text
hodnocení = movie.find("div", třída_="ratings-imdb-rating").silný.text
popis = film.najít("div", třída_="obsah-položky seznamu").najít_vše("p")[1].text.strip()
prvek_žánru = film.najít("rozpětí", třída_="žánr")
žánr = prvek_žánru.text.strip() -li prvek_žánru jinýŽádný
datum_vydání = movie.find("rozpětí", třída_="lister-item-year text-muted unbold").text.strip()
režisérské_hvězdy = movie.find("p", třída_="text ztlumený").najít_vše("A")
ředitelé = [osoba.text pro osoba v režisérské_hvězdy[:-1]]
hvězdičky = [osoba.text pro osoba v režisérské_hvězdy[-1:]]
movie_data = {
"Titul": titul,
"Hodnocení": hodnocení,
"Popis": popis,
"Žánr": žánr,
"Datum vydání": datum vydání,
"ředitelé": ředitelé,
"hvězdy": hvězdy
}
vrátit se filmová_data
Nakonec vytvořte funkci, která bude provádět skutečné škrábání pomocí dvou výše uvedených funkcí. Bude to trvat rok a maximální počet filmů, které chcete seškrábat.
defscrape_imdb_movies(rok, limit):
základní_url = " https://www.imdb.com/search/title"
záhlaví = {"Přijmout-jazyk": "en-US, en; q=0,9"}
filmy = []
start = 1
zatímco len (filmy) < limit:
parametry = {
"datum vydání": rok,
"řadit": "num_votes, desc",
"Start": Start
}
soup = get_soup (základní_url, params=params, headers=headers)
seznam_filmů = soup.find_all("div", třída_="režim položky seznamu - pokročilý")
-li len (seznam_filmů) == 0:
přestávka
pro film v seznam_filmů:
movie_data = extrakt_movie_data (film)
movies.append (data_filmu)
-li len (filmy) >= limit:
přestávka
začátek += 50# IMDb zobrazuje 50 filmů na stránku
čas.spánek(1) # Přidejte zpoždění, aby nedošlo k přetížení serveru
vrátit se filmy
Pak zavolejte na def scrape_imdb_movies dělat škrábání.
# Scrape 1000 filmů vydaných v roce 2023 (nebo tolik, kolik je k dispozici)
filmy = scrape_imdb_movies(2023, 1000)
Nyní jste zkopírovali data.
Dalším krokem je vytvoření datové sady z těchto dat.
Vytvoření datové sady ze seškrabovaných dat
Vytvořte DataFrame pomocí Pandas ze seškrábaných dat.
df = pd. DataFrame (filmy)
Poté proveďte předběžné zpracování a čištění dat. V takovém případě odeberte řádky s chybějícími hodnotami. Poté extrahujte rok z data vydání a převeďte jej na číselný. Odstraňte nepotřebné sloupce. Převést Hodnocení sloupec na číselný. Nakonec ze souboru odstraňte neabecední znaky Titul sloupec.
df = df.dropna()
df['Rok vydání'] = df['Datum vydání'].str.extract(r'(\d{4})')
df['Rok vydání'] = pd.to_numeric (df['Rok vydání'],
chyby ='donutit').astype('Int64')
df = df.drop(['Datum vydání'], osa=1)
df['Hodnocení'] = pd.to_numeric (df['Hodnocení'], chyby='donutit')
df['Titul'] = df['Titul'].aplikovat(lambda x: re.sub(r'\W+', ' ', X))
Uložte data do souboru pro pozdější použití ve vašem projektu.
df.to_csv("imdb_movies_dataset.csv", index=Nepravdivé)
Nakonec vytiskněte prvních pět řádků datové sady, abyste měli přehled, jak vypadá.
df.head()
Výstup je takový, jak je znázorněno na obrázku níže:
Nyní máte datovou sadu získanou prostřednictvím web scrapingu.
Web Scraping pomocí jiných knihoven Pythonu
Beautiful Soup není jedinou knihovnou Pythonu, kterou můžete použít pro web scraping. Jsou tam i jiné knihovny. Každý má své výhody a omezení. Prozkoumejte je, abyste zjistili, který z nich nejlépe vyhovuje vašemu případu použití.