Škrábaný

Scrapy s XPath Selectors

Scrapy s XPath Selectors
HTML je jazyk webových stránek a mezi otevřením a zavřením každé webové stránky visí spousta informací html štítek. Existuje spousta způsobů, jak k tomu přistupovat, ale v tomto článku bychom to dělali pomocí selektoru Xpath prostřednictvím Pythonovy knihovny Scrapy.

Knihovna Scrapy je velmi výkonná knihovna pro škrábání webu, která se také snadno používá. Pokud jste v této oblasti noví, můžete postupovat podle dostupného výukového programu o používání knihovny Scrapy.

Tento kurz popisuje použití selektorů Xpath. Xpath používá cestu jako syntaxi k navigaci v uzlech dokumentů XML. Jsou také užitečné při procházení značek HTML.

Na rozdíl od tutoriálu Scrapy budeme z důvodu jednoduchosti dělat všechny naše operace zde na terminálu. To neznamená, že Xpath nelze použít se správným programem Scrapy, ale lze je použít v knihovně analýzy parametru odpovědi.

Budeme pracovat s příkladem.webcraping.com, protože je velmi jednoduchý a pomohl by porozumět konceptům.

Chcete-li v našem terminálu použít scrapy, zadejte následující příkaz:

$ scrapy shell http: // příklad.webcraping.com

Navštívil by web a získal potřebné informace, pak by nám nechal interaktivní prostředí, se kterým bychom mohli pracovat. Měla by se zobrazit výzva jako:

V 1]:

Z interaktivní relace budeme pracovat s Odezva objekt.

Takto by vypadala naše syntaxe pro většinu tohoto článku:

V [1]: odpověď.xpath ('xpathsyntax').výpis()

Tento příkaz výše se používá k extrakci všech odpovídajících značek podle syntaxe Xpath a následnému uložení do seznamu.

In [2]: response.xpath ('xpathsyntax').extract_first ()

Tento příkaz výše se používá k extrakci pouze první shodné značky a uložení do seznamu.
Nyní můžeme začít pracovat na syntaxi Xpath.

NAVIGAČNÍ ZNAČKY

Navigace tagy v Xpath je velmi snadná, vše, co potřebujete, je lomítko „/“ následované názvem tagu.

In [3]: response.xpath ('/ html').výpis()

Výše uvedený příkaz vrátí html tag a vše, co obsahuje, jako jednu položku v seznamu.

Pokud chceme získat hlavní část webové stránky, použijeme následující:

In [4]: ​​response.xpath ('/ html / body').výpis()

Xpath také umožňuje zástupný znak „*“, který odpovídá všemu na úrovni, ve které se používá.

In [5]: response.xpath ('/ *').výpis()

Výše uvedený kód by odpovídal všemu v dokumentu. Totéž se stane, když použijeme '/ html'.

In [6]: response.xpath ('/ html / *').výpis()

Kromě navigačních značek můžeme pomocí „//“ získat všechny následující značky konkrétní značky.

In [7]: response.xpath ('/ html // a').výpis()

Výše uvedený kód vrátí všechny značky ukotvení pod ve značce html i.E. vrátilo by to seznam všech následných kotevních značek.

ZNAČKY ATRIBUTŮ A JEJICH HODNOT

Někdy může být problém s navigací v html značkách, abyste se dostali k požadované značce. Tomuto problému lze zabránit jednoduchým vyhledáním potřebné značky podle jejího atributu.

V [8]: odpověď.xpath ('/ html // div [@id = "stránkování"]').výpis()

Výše uvedený kód vrátí všechny div značky pod html značka, která má id atribut s hodnotou stránkování.

In [9]: response.xpath ('/ html // div [@class = "span12"]').výpis()

Výše uvedený kód vrátí seznam všech div značky pod značkou html, pouze pokud mají atribut třídy s hodnotou span12.

Co když neznáte hodnotu atributu? Vše, co chcete, je získat značky s určitým atributem bez obav o jejich hodnotu. Je to také jednoduché, vše, co musíte udělat, je použít pouze symbol @ a atribut.

In [10]: response.xpath ('/ html // div [@class]').výpis()

Tento kód vrátí seznam všech značek div, které obsahují atribut třídy, bez ohledu na to, jakou hodnotu tento atribut třídy obsahuje.

Co kdybyste věděli jen pár znaků obsažených v hodnotě atributu? Je také možné získat tyto typy značek.

In [11]: response.xpath ('/ html // div [obsahuje (@id, "ion")]').výpis()

Výše uvedený kód vrátí všechny značky div pod html značkou, které mají atribut id, avšak nevíme, jakou hodnotu má atribut, kromě toho, že víme, že obsahuje „ion“.

Stránka, kterou analyzujeme, má v této kategorii pouze jednu značku a hodnota je „stránkování“, takže by byla vrácena.

Dobře?

ZNAČKY PODLE JEHO TEXTU

Nezapomeňte, že jsme dříve shodovali značky podle jejich atributů. Můžeme také spojit značky podle jejich textu.

In [12]: response.xpath ('/ html // a [.= "Alžírsko"] ')).výpis()

Výše uvedený kód by nám pomohl získat všechny kotevní značky, které obsahují text „Alžírsko“. Poznámka: Musí to být značky s přesně tímto textovým obsahem.

Báječné.

Co kdybychom neznali přesný textový obsah a víme jen několik textových obsahů? Můžeme to udělat také.

In [13]: response.xpath ('/ html // a [obsahuje (text (), "A")]').výpis()

Výše uvedený kód by získal značky, které mají v textovém obsahu písmeno „A“.

OBSAH VYTAHOVÁNÍ ZNAČKY

Po celou dobu jsme mluvili o hledání správných značek. Je čas extrahovat obsah značky, když ji najdeme.

Je to docela jednoduché. Vše, co musíme udělat, je přidat do syntaxe „/ text ()“ a obsah tagu bude extrahován.

In [14]: response.xpath ('/ html // a / text ()').výpis()

Výše uvedený kód by získal všechny značky ukotvení v html dokumentu a poté extrahoval textový obsah.

TĚŽBA ODKAZŮ

Teď, když víme, jak extrahovat text ve značkách, měli bychom vědět, jak extrahovat hodnoty atributů. Hodnoty atributů, které jsou pro nás nanejvýš důležité, jsou většinou odkazy.

To je téměř stejné jako extrahování textových hodnot, ale místo použití „/ text ()“ bychom použili symbol „/ @“ a název atributu.

In [15]: response.xpath ('/ html // a / @ href').výpis()

Výše uvedený kód by extrahoval všechny odkazy ve značkách ukotvení, odkazy by měly být hodnotami href atribut.

NAVIGACE SOUHRNNÍCH ZNAČEK

Pokud jste si všimli, celou dobu jsme procházeli tagy. Existuje však jedna situace, kterou jsme nevyřešili.

Jak vybereme konkrétní značku, když jsou značky se stejným názvem na stejné úrovni?




Afghánistán




Alandské ostrovy


V případě, jako je ten, který máme výše, bychom se měli podívat, jestli se na to podíváme extract_first () získat první zápas.

Co když se ale chceme shodovat s druhým? Co když existuje více než deset možností a my chceme pátou? Na to právě teď odpovíme.

Zde je řešení: Když píšeme naši syntaxi Xpath, umístíme pozici značky, kterou chceme, do hranatých závorek, stejně jako indexujeme, ale index začíná na 1.

Při pohledu na html webové stránky, se kterou pracujeme, byste si všimli, že je toho hodně značky na stejné úrovni. Získat třetí tag, použijeme následující kód:

In [16]: response.xpath ('/ html // tr [3]').výpis()

Také byste si všimli, že značky jsou ve dvou, pokud chceme jen druhou značky z řádky provedeme následující:

In [17]: response.xpath ('/ html // td [2]').výpis()

ZÁVĚR:

Xpath je velmi účinný způsob analýzy souborů html a může pomoci minimalizovat použití regulárních výrazů při jejich analýze, protože má obsahuje funkce ve své syntaxi.

Existují další knihovny, které umožňují analýzu pomocí Xpath, jako je Selenium pro webovou automatizaci. Xpath nám při analýze html poskytuje spoustu možností, ale to, co bylo popsáno v tomto článku, by mělo být schopné provést vás běžnými operacemi analýzy html.

Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z nejpopulárnějších her pro obchodní simulaci. V této hře musíte vytvořit skvělé dopravní podnikání. Začnete však na začátku kolem r...
Hry SuperTuxKart pro Linux
SuperTuxKart pro Linux
SuperTuxKart je skvělý titul navržený tak, aby vám ve vašem systému Linux přinesl zážitek Mario Kart zdarma. Je to docela náročné a zábavné hrát, je n...
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
The Battle for Wesnoth je jednou z nejpopulárnějších strategických her s otevřeným zdrojovým kódem, které si v tuto chvíli můžete zahrát. Tato hra se ...