Škrábaný

Web Scraping s modulem Python Scrapy

Web Scraping s modulem Python Scrapy
Dovednost webového scrapingu se dnes stala zlatou, tak se pojďme naučit, jak můžeme získat potřebná data z webových stránek. V tomto článku bychom hovořili o knihovně Scrapy Python, o tom, co umí a jak ji používat. Začněme.

Proč Scrapy?

Scrapy je robustní knihovna pro škrábání webů, která poskytuje možnost stahovat webové stránky, obrázky a všechna data, na která si vzpomenete, rychlostí blesku. Rychlost má při výpočtu velký význam a Scrapy na tom pracuje tak, že navštěvuje webové stránky asynchronně a dělá spoustu práce na pozadí, takže celý úkol vypadá snadno.

Je třeba říci, že Python má další knihovny, které lze použít ke škrábání dat z webových stránek, ale žádná z nich není srovnatelná se Scrapy, pokud jde o efektivitu.

Instalace

Pojďme se rychle podívat, jak lze tuto výkonnou knihovnu nainstalovat do vašeho počítače.

Stejně jako u většiny knihoven Pythonu můžete Scrapy nainstalovat pomocí pip modulu:

pip nainstalujte Scrapy

Můžete zkontrolovat, zda instalace proběhla úspěšně, importováním scrapy do interaktivního prostředí Pythonu.

$ python
Python 3.5.2 (výchozí, 14. září 2017, 22:51:06)
[GCC 5.4.0 20160609] na Linuxu

Další informace získáte zadáním „help“, „copyright“, „credit“ nebo „license“.

>>> import scrapy

Teď, když jsme s instalací hotovi, pojďme do toho.

Vytvoření projektu škrábání webu

Během instalace bylo do cesty přidáno klíčové slovo scrapy, abychom mohli klíčové slovo použít přímo z příkazového řádku. To bychom využívali během našeho používání knihovny.

Z adresáře podle vašeho výběru spusťte následující příkaz:

scrapy startproject webscraper

Tím by se vytvořil adresář s názvem webový škrabák v aktuálním adresáři a scrapy.soubor CFG. V webový škrabák  adresář by měl __init__.py, položky.py, střední zboží.py, potrubí.py, nastavení.py soubory a adresář s názvem pavouci.

Naše pavoučí soubory i.E. skript, který pro nás dělá webový scraping, by byl uložen v pavouci adresář.

Psaní našeho pavouka

Než se pustíme do psaní našeho pavouka, očekává se, že už víme, jaký web chceme seškrábat. Pro účely tohoto článku škrábáme ukázkový web pro vytváření webů: http: // příklad.webcraping.com.

Tento web má pouze názvy zemí a jejich vlajky, s různými stránkami a my sešrotujeme tři stránky. Tři stránky, na kterých bychom pracovali, jsou:

http: // příklad.webcraping.com / places / default / index / 0
http: // příklad.webcraping.com / places / default / index / 1
http: // příklad.webcraping.com / places / default / index / 2

Zpět k našemu pavoukovi vytvoříme sample_spider.py v adresáři pavouků. Z terminálu jednoduché klepněte na sample_spider.py příkaz by pomohl vytvořit nový soubor.

Po vytvoření souboru bychom jej naplnili následujícími řádky kódu:

importovat scrapy
 
třída SampleSpider (scrapy.Pavouk):
name = "sample"
start_urls = [
"http: // příklad.webcraping.com / places / default / index / 0 ",
"http: // příklad.webcraping.com / places / default / index / 1 ",
"http: // příklad.webcraping.com / places / default / index / 2 "
]
 
def parse (self, response):
page_number = response.url.split ('/') [- 1]
file_name = "stránka .html ".formát (číslo_stránky)
s otevřeným (název_souboru, 'wb') jako soubor:
soubor.zápis (odpověď.tělo)

Na nejvyšší úrovni adresáře projektu spusťte následující příkaz:

scrapy crawl sample

Připomeňme, že jsme dali naše SampleSpider třída a název atribut vzorek.

Po spuštění tohoto příkazu byste si všimli, že tři soubory s názvem page0.html, stránka1.html, stránka2.html jsou uloženy do adresáře.

Pojďme se podívat na to, co se stane s kódem:

importovat scrapy

Nejprve importujeme knihovnu do našeho jmenného prostoru.

třída SampleSpider (scrapy.Pavouk):
name = "sample"

Potom vytvoříme třídu pavouků, které nazýváme SampleSpider. Náš pavouk dědí z škrábání.Pavouk. Všichni naši pavouci musí zdědit po škrábání.Pavouk. Po vytvoření třídy dáme našemu pavoukovi a název atribut, toto název atribut se používá k vyvolání pavouka z terminálu. Pokud si vzpomínáte, spustili jsme scrapy crawl sample příkaz ke spuštění našeho kódu.

start_urls = [
 
"http: // příklad.webcraping.com / places / default / index / 0 ",
"http: // příklad.webcraping.com / places / default / index / 1 ",
"http: // příklad.webcraping.com / places / default / index / 2 "
]

Máme také seznam adres URL, které má pavouk navštívit. Seznam musí být vyvolán start_urls. Pokud chcete seznamu dát jiný název, museli bychom definovat a start_requests funkce, která nám dává další možnosti. Chcete-li se dozvědět více, můžete si prohlédnout scrapy dokumentaci.

Bez ohledu na to nezapomeňte uvést http: // nebo https: // pro vaše odkazy, jinak byste se museli vypořádat s chybějící chybou schématu.

def parse (self, response):

Poté pokračujeme v deklaraci funkce syntaktické analýzy a zadání parametru odpovědi. Po spuštění kódu se vyvolá funkce analýzy a odešle se objekt odpovědi, který obsahuje všechny informace o navštívené webové stránce.

page_number = response.url.split ('/') [- 1]
file_name = "stránka .html ".formát (číslo_stránky)

To, co jsme s tímto kódem udělali, je rozdělit řetězec obsahující adresu a uložit číslo stránky samostatně do a číslo stránky proměnná. Pak vytvoříme a název souboru proměnná vložení číslo stránky v řetězci, který by byl názvem souborů, které vytváříme.

s otevřeným (název_souboru, 'wb') jako soubor:
soubor.zápis (odpověď.tělo)

Nyní jsme soubor vytvořili a obsah webové stránky zapisujeme do souboru pomocí tělo atribut Odezva objekt.

Můžeme udělat víc než jen uložit webovou stránku. Knihovnu BeautifulSoup lze použít k analýze souboru tělo.Odezva. Pokud nejste obeznámeni s knihovnou, můžete si prohlédnout tento tutoriál BeautiulSoup.

Ze stránky, která má být vyřazena, je výňatek z html obsahující data, která potřebujeme:

Všimli jste si, že všechna potřebná data jsou uzavřena ve značkách div, takže přepíšeme kód, abychom analyzovali html.
Tady je náš nový skript:

importovat scrapy
z importu bs4 BeautifulSoup
 
třída SampleSpider (scrapy.Pavouk):
name = "sample"
 
start_urls = [
"http: // příklad.webcraping.com / places / default / index / 0 ",
"http: // příklad.webcraping.com / places / default / index / 1 ",
"http: // příklad.webcraping.com / places / default / index / 2 "
]
 
def parse (self, response):
page_number = response.url.split ('/') [- 1]
file_name = "stránka .txt ".formát (číslo_stránky)
s otevřeným (název_souboru, 'w') jako soubor:
html_content = BeautifulSoup (odpověď.body, "lxml")
div_tags = html_content.find ("div", "id": "results")
country_tags = div_tags.find_all ("div")
country_name_position = zip (range (len (country_tags)), country_tags)
pro pozici, country_name v country_name_position:
soubor.write ("číslo země : \ n".formát (pozice + 1, country_name.text))

Kód je do značné míry stejný jako ten původní, ale do našeho jmenného prostoru jsem přidal BeautifulSoup a změnil jsem logiku ve funkci analýzy.

Pojďme se rychle podívat na logiku.

def parse (self, response):

Zde jsme definovali funkci analýzy a dali jí parametr odpovědi.

page_number = response.url.split ('/') [- 1]
file_name = "stránka .txt ".formát (číslo_stránky)
s otevřeným (název_souboru, 'w') jako soubor:

To dělá to samé, co je popsáno v úvodním kódu, jediný rozdíl je v tom, že pracujeme s textovým souborem místo s html souborem. Uložili bychom načtená data do textového souboru, a ne celý webový obsah do html, jak bylo provedeno dříve.

html_content = BeautifulSoup (odpověď.body, "lxml")

To, co jsme v tomto řádku kódu udělali, je zaslat Odezva.tělo jako argument do knihovny BeautifulSoup a výsledky přiřadil html_content proměnná.

div_tags = html_content.find ("div", "id": "results")

Vezmeme-li obsah html, analyzujeme jej zde hledáním a div značka, která má také a id atribut s Výsledek protože je to hodnota, pak ji můžeme uložit do a div_tags proměnná.

country_tags = div_tags.find_all ("div")

Pamatujte, že země existovaly v div tagy také, nyní jednoduše dostáváme všechny div značky a uložit je jako seznam do složky country_tags proměnná.

country_name_position = zip (range (len (country_tags)), country_tags)
 
pro pozici, country_name v country_name_position:
soubor.write ("číslo země : \ n".formát (pozice + 1, country_name.text))

Zde iterujeme pozicí zemí mezi všemi značkami zemí a poté ukládáme obsah do textového souboru.

Takže ve svém textovém souboru byste měli něco jako:

země číslo 1: Afghánistán
země číslo 2: Alandské ostrovy
země číslo 3: Albánie

Závěr

Scrapy je bezpochyby jedna z nejsilnějších knihoven, je velmi rychlá a v podstatě stahuje webovou stránku. Pak vám dává svobodu v tom, co si s webovým obsahem přejete.

Měli bychom si uvědomit, že Scrapy dokáže mnohem víc, než jsme se zde odhlásili. Pokud chcete, můžete data analyzovat pomocí selektorů Scrapy CSS nebo Xpath. Pokud potřebujete udělat něco složitějšího, můžete si přečíst dokumentaci.

Hry Jak zachytit a streamovat vaši herní relaci v systému Linux
Jak zachytit a streamovat vaši herní relaci v systému Linux
V minulosti bylo hraní her považováno pouze za koníček, ale postupem času došlo v herním průmyslu k obrovskému nárůstu z hlediska technologie a počtu ...
Hry Nejlepší hry pro ruční sledování
Nejlepší hry pro ruční sledování
Oculus Quest nedávno představil skvělou myšlenku ručního sledování bez ovladačů. S neustále se zvyšujícím počtem her a aktivit, které provádějí podpor...
Hry Jak zobrazit překrytí OSD v linuxových aplikacích a hrách na celou obrazovku
Jak zobrazit překrytí OSD v linuxových aplikacích a hrách na celou obrazovku
Hraní her na celou obrazovku nebo používání aplikací v režimu celé obrazovky bez rozptýlení vás mohou odříznout od příslušných systémových informací v...