Jak vytvořit základní webový prohledávač pro získávání informací z webu

Jak vytvořit základní webový prohledávač pro získávání informací z webu

Programy, které čtou informace z webů nebo webových prohledávačů, mají všechny druhy užitečných aplikací. Můžete sehnat informace o akciích, sportovní výsledky, text z účtu na Twitteru nebo stáhnout ceny z nákupních webů.





Psaní těchto programů procházení webu je jednodušší, než byste si mohli myslet. Python má skvělou knihovnu pro psaní skriptů, které extrahují informace z webových stránek. Podívejme se, jak vytvořit webový prohledávací modul pomocí Scrapy.





Instalace Scrapy

Šrotování je knihovna Pythonu, která byla vytvořena za účelem seškrábání webu a vytváření webových prohledávačů. Je rychlý, jednoduchý a dokáže procházet více webovými stránkami bez velkého úsilí.





Scrapy je k dispozici prostřednictvím knihovny Pip Installs Python (PIP), zde je opakování jak nainstalovat PIP na Windows, Mac a Linux .

Upřednostňujeme používání virtuálního prostředí Python, protože vám to umožní nainstalovat Scrapy do virtuálního adresáře, který nechá vaše systémové soubory na pokoji. Dokumentace Scrapy doporučuje udělat to, abyste dosáhli nejlepších výsledků.



Vytvořte adresář a inicializujte virtuální prostředí.

sledujte filmy zdarma bez stahování
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Nyní můžete Scrapy do tohoto adresáře nainstalovat pomocí příkazu PIP.





pip install scrapy

Rychlá kontrola, zda je Scrapy správně nainstalován

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Jak vytvořit webový prohledávací modul

Nyní, když je prostředí připraveno, můžete začít vytvářet webový prohledávací modul. Seškrábněme nějaké informace ze stránek Wikipedie o bateriích: https://en.wikipedia.org/wiki/Battery_(electricity) .





Prvním krokem k napsání prolézacího modulu je definování třídy Pythonu, ze které se rozšiřuje Scrapy. Pavouk . Získáte tak přístup ke všem funkcím a funkcím Scrapy. Nazvěme tuto třídu pavouk 1 .

Třída pavouka potřebuje několik informací:

  • na název pro identifikaci pavouka
  • na start_urls proměnná obsahující seznam adres URL, z nichž lze procházet (příkladem v tomto kurzu bude adresa Wikipedie)
  • na analyzovat () metoda, která se používá ke zpracování webové stránky k extrahování informací
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Rychlý test, který zajistí, že vše funguje správně.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Vypnutí protokolování

Spuštěním Scrapy s touto třídou se vytisknou informace o protokolu, které vám právě teď nepomohou. Pojďme to zjednodušit odstraněním těchto přebytečných informací z protokolu. Použijte a Varování příkaz přidáním kódu na začátek souboru.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Nyní, když skript spustíte znovu, informace z protokolu se nevytisknou.

Pomocí prohlížeče Chrome Inspector

Vše na webové stránce je uloženo v prvcích HTML. Prvky jsou uspořádány v Document Object Model (DOM). Pochopení DOM je zásadní pro maximální využití vašeho webového prohledávače. Webový prohledávač prohledává všechny prvky HTML na stránce, aby našel informace, takže je důležité vědět, jak jsou uspořádány.

Google Chrome má nástroje, které vám pomohou rychleji najít prvky HTML. Pomocí inspektoru můžete vyhledat HTML pro jakýkoli prvek, který vidíte na webové stránce.

  • Přejděte na stránku v prohlížeči Chrome
  • Umístěte myš na prvek, který chcete zobrazit
  • Klikněte pravým tlačítkem a vyberte Kontrolovat z nabídky

Tyto kroky otevřou konzolu pro vývojáře pomocí Elementy vybraná karta. Ve spodní části konzoly uvidíte strom prvků. Tento strom je způsob, jakým získáte informace pro svůj skript.

Extrahování názvu

Pojďme si skript udělat nějakou práci za nás; Jednoduché procházení pro získání titulního textu webové stránky.

Spusťte skript přidáním nějakého kódu do souboru analyzovat () metoda, která extrahuje název.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

The Odezva argument podporuje metodu s názvem CSS () který vybírá prvky ze stránky pomocí vámi zadaného umístění.

V tomto příkladu je prvek h1.firstHeading . Přidávání

::text

ke skriptu je to, co vám poskytne textový obsah prvku. Nakonec, výpis() metoda vrátí vybraný prvek.

Po spuštění tohoto skriptu v aplikaci Scrapy se název vytiskne v textové podobě.

[u'Battery (electricity)']

Hledání popisu

Nyní, když jsme seškrábli text nadpisu, pojďme se skriptem udělat více. Prolézací modul najde první odstavec za názvem a extrahuje tyto informace.

Zde je strom prvků v Chrome Developer Console:

jak vzdáleně hacknout kameru notebooku
div#mw-content-text>div>p

Šipka doprava (>) označuje vztah rodič-dítě mezi prvky.

Toto umístění vrátí všechny p odpovídající prvky, což zahrnuje celý popis. Chcete -li získat první p element můžete napsat tento kód:

response.css('div#mw-content-text>div>p')[0]

Stejně jako název přidáte extraktor CSS

::text

získat textový obsah prvku.

response.css('div#mw-content-text>div>p')[0].css('::text')

Konečný výraz používá výpis() vrátit seznam. Můžete použít Python připojit() funkci připojit se k seznamu, jakmile je veškeré procházení dokončeno.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Výsledkem je první odstavec textu!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Shromažďování dat JSON

Scrapy může extrahovat informace v textové podobě, což je užitečné. Scrapy také umožňuje zobrazit datový JavaScript Object Notation (JSON). JSON je úhledný způsob organizace informací a je široce používán ve vývoji webových aplikací. JSON funguje docela dobře s Pythonem také.

Když potřebujete shromažďovat data jako JSON, můžete použít výtěžek prohlášení zabudované do Scrapy.

Zde je nová verze skriptu pomocí příkazu yield. Namísto získání prvního prvku p v textovém formátu to uchopí všechny prvky p a uspořádá ho ve formátu JSON.

složka nebo soubor je otevřen v jiném programu
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Nyní můžete spustit pavouka zadáním výstupního souboru JSON:

scrapy runspider spider3.py -o joe.json

Skript nyní vytiskne všechny prvky p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Škrábání více prvků

Prozatím webový prohledávač ze stránky vyškrábal název a jeden druh prvku. Scrapy může také extrahovat informace z různých typů prvků v jednom skriptu.

Pojďme extrahovat nejlepší IMDb Box Office hity na víkend. Tyto informace jsou čerpány z http://www.imdb.com/chart/boxoffice , v tabulce s řádky pro každou metriku.

The analyzovat () metoda může extrahovat více než jedno pole z řádku. Pomocí nástrojů pro vývojáře Chrome najdete prvky vnořené uvnitř tabulky.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

The obraz selektor to určuje obr je potomkem td.posterColumn . Chcete -li extrahovat správný atribut, použijte výraz | _+_ |.

Spuštěním pavouka se vrátí JSON:

::attr(src)

Více webových škrabek a robotů

Scrapy je podrobná knihovna, která zvládne téměř jakýkoli druh procházení webu, o který ji požádáte. Pokud jde o hledání informací v HTML prvcích, v kombinaci s podporou Pythonu, je těžké je porazit. Ať už stavíte webový prohledávač nebo se učíte základy webového scrapingu, jediným omezením je, kolik jste ochotni se naučit.

Pokud hledáte více způsobů, jak vytvořit prohledávače nebo roboty, můžete to zkusit stavět roboty Twitter a Instagram pomocí Pythonu . Python dokáže ve vývoji webu vytvořit několik úžasných věcí, takže při prozkoumávání tohoto jazyka stojí za to jít nad rámec webových prohledávačů.

Podíl Podíl tweet E-mailem 15 Příkazy příkazového řádku systému Windows (CMD), které musíte znát

Příkazový řádek je stále výkonným nástrojem systému Windows. Zde jsou nejužitečnější příkazy CMD, které každý uživatel Windows potřebuje znát.

Číst dále
Související témata
  • Programování
  • Nástroje pro webmastery
  • Programování
  • Krajta
  • Návody na kódování
  • Webové prohledávače
O autorovi Anthony Grant(40 článků zveřejněno)

Anthony Grant je autor na volné noze pokrývající programování a software. Je počítačovým vědcem, který se zabývá programováním, Excelem, softwarem a technologiemi.

Více od Anthonyho Granta

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru