Scrapy

Scrapy s XPath Selectors

Scrapy s XPath Selectors
HTML je jazyk webových stránok a medzi otvorením a zatvorením každej webovej stránky visí veľa informácií html značka. Existuje veľa spôsobov, ako k tomu získať prístup, avšak v tomto článku by sme to robili pomocou selektora Xpath prostredníctvom skriptovej knižnice Pythonu.

Knižnica Scrapy je veľmi výkonná knižnica na scraping webových aplikácií, ktorá sa tiež ľahko používa. Ak ste v tejto oblasti nováčikom, môžete postupovať podľa dostupného tutoriálu o používaní knižnice Scrapy.

Tento výukový program sa venuje použitiu selektorov Xpath. Xpath používa cestu ako syntax na navigáciu v uzloch dokumentov XML. Sú užitočné aj pri navigácii v značkách HTML.

Na rozdiel od tutoriálu Scrapy, budeme tu pre zjednodušenie robiť všetky naše operácie tu na termináli. To neznamená, že Xpath nemožno použiť so správnym programom Scrapy, ale je možné ich použiť v knižnici syntaktickej analýzy parametra odpovede.

Budeme pracovať s príkladom.webcraping.com, pretože je veľmi jednoduchý a pomohol by pochopiť pojmy.

Ak chcete v našom termináli použiť scrapy, zadajte nasledujúci príkaz:

$ scrapy shell http: // príklad.webcraping.com

Navštívila by stránku a získala potrebné informácie, potom by nám nechala interaktívny shell, s ktorým by sme mohli pracovať. Mali by ste vidieť výzvu ako:

V [1]:

Z interaktívnej relácie budeme pracovať s odpoveď objekt.

Takto by vyzerala naša syntax pre väčšinu tohto článku:

V [1]: odpoveď.xpath ('xpathsyntax').extrakt ()

Tento príkaz vyššie sa používa na extrahovanie všetkých zhodných značiek podľa syntaxe Xpath a ich uloženie do zoznamu.

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

Tento príkaz vyššie sa používa na extrahovanie iba prvej zhodnej značky a jej uloženie do zoznamu.
Teraz môžeme začať pracovať na syntaxi Xpath.

NAVIGAČNÉ ZNAČKY

Navigácia v značkách v Xpath je veľmi jednoduchá, všetko, čo potrebujete, je lomka „/“, za ktorou nasleduje názov značky.

In [3]: response.xpath ('/ html').extrakt ()

Vyššie uvedený príkaz vráti príkaz html tag a všetko, čo obsahuje, ako jednu položku v zozname.

Ak chceme získať text webovej stránky, použili by sme nasledujúce:

In [4]: ​​response.xpath ('/ html / body').extrakt ()

Xpath umožňuje aj zástupný znak „*“, ktorý sa zhoduje so všetkým na úrovni, v ktorej sa používa.

In [5]: response.xpath ('/ *').extrakt ()

Vyššie uvedený kód by zodpovedal všetkému v dokumente. To isté sa stane, keď použijeme '/ html'.

In [6]: response.xpath ('/ html / *').extrakt ()

Okrem navigácie v značkách môžeme pomocou značky „//“ získať všetky nasledujúce značky konkrétnej značky.

In [7]: response.xpath ('/ html // a').extrakt ()

Vyššie uvedený kód vráti všetky kotviace značky pod v html značke i.e. vrátilo by to zoznam všetkých potomkov kotviacich značiek.

ZNAČKY ATRIBÚTOV A ICH HODNOTY

Niekedy môže byť problém s navigáciou v značkách HTML, aby ste sa dostali k požadovanej značke. Týmto problémom je možné zabrániť jednoduchým nájdením potrebnej značky podľa jej atribútu.

In [8]: response.xpath ('/ html // div [@id = "stránkovanie"]').extrakt ()

Vyššie uvedený kód vráti všetky div značky pod html značka, ktorá má id atribút s hodnotou stránkovanie.

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

Vyššie uvedený kód vráti zoznam všetkých súborov div značky pod značkou html, iba ak majú atribút triedy s hodnotou span12.

Čo ak nepoznáte hodnotu atribútu? Všetko, čo chcete, je získať značky s konkrétnym atribútom bez obáv o ich hodnotu. Toto je tiež jednoduché, všetko, čo musíte urobiť, je použiť iba symbol @ a atribút.

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

Tento kód vráti zoznam všetkých značiek div, ktoré obsahujú atribút triedy, bez ohľadu na to, akú hodnotu má tento atribút triedy.

Čo na tom, ak poznáte iba pár znakov obsiahnutých v hodnote atribútu? Je tiež možné získať tieto typy značiek.

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

Vyššie uvedený kód vráti všetky značky div pod značkou html, ktoré majú atribút id, avšak nevieme, akú hodnotu má atribút, ibaže vieme, že obsahuje „ion“.

Stránka, ktorú analyzujeme, má v tejto kategórii iba jednu značku a hodnota je „stránkovanie“, takže by bola vrátená.

Super správne?

ZNAČKY PODĽA ICH TEXTU

Pamätajte, že sme značky priradili skôr podľa ich atribútov. Značky môžeme priradiť aj podľa ich textu.

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

Vyššie uvedený kód by nám pomohol získať všetky kotviace značky, ktoré majú v sebe text „Alžírsko“. Pozn .: Musí to byť značka s presne týmto textovým obsahom.

Úžasné.

Čo na tom, ak nevieme presný textový obsah a poznáme iba zopár textového obsahu? Môžeme to urobiť tiež.

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

Vyššie uvedený kód by získal značky, ktoré majú v textovom obsahu písmeno „A“.

OBSAH VYŤAHUJÚCEHO ZNAČKY

Celý čas sme hovorili o hľadaní správnych značiek. Je čas extrahovať obsah značky, keď ju nájdeme.

Je to celkom jednoduché. Všetko, čo musíme urobiť, je pridať do syntaxe „/ text ()“ a obsah značky by sa extrahoval.

V [14]: odpoveď.xpath ('/ html // a / text ()').extrakt ()

Vyššie uvedený kód by získal všetky ukotvovacie značky v html dokumente a potom extrahoval textový obsah.

ŤAŽBA ODKAZOV

Teraz, keď vieme, ako extrahovať text v značkách, by sme mali vedieť, ako extrahovať hodnoty atribútov. Hodnoty atribútov, ktoré sú pre nás najdôležitejšie, sú väčšinou odkazy.

Toto je takmer to isté ako extrahovanie textových hodnôt, ale namiesto použitia „/ text ()“ by sme použili symbol „/ @“ a názov atribútu.

In [15]: response.xpath ('/ html // a / @ href").extrakt ()

Vyššie uvedený kód by extrahoval všetky odkazy v kotviacich značkách, odkazy by mali byť hodnotami href atribút.

NAVIGÁCIA SÚBORNÝCH ZNAČIEK

Ak ste si všimli, po celú túto dobu prechádzame značky. Existuje však jedna situácia, ktorú sme neriešili.

Ako vyberieme konkrétnu značku, keď sú značky s rovnakým názvom na rovnakej úrovni?




Afganistan




Alandské ostrovy


V prípade, ako je ten, ktorý máme vyššie, sa na to môžeme pozrieť, mohli by sme povedať, že použijeme extract_first () získať prvý zápas.

Čo však, ak sa chceme vyrovnať tomu druhému? Čo ak je možností viac ako desať a my chceme piatu? Na to si odpovieme práve teraz.

Toto je riešenie: Keď píšeme svoju syntax Xpath, dáme pozíciu značky, ktorú chceme, do hranatých zátvoriek, rovnako ako indexujeme, ale index začína na 1.

Pri pohľade na html webovej stránky, s ktorou pracujeme, by ste si všimli, že je toho naozaj veľa značky na rovnakej úrovni. Aby som získal tretí tag, použili by sme nasledujúci kód:

In [16]: response.xpath ('/ html // tr [3]').extrakt ()

Tiež by ste si všimli, že značky sú v dvoch, ak chceme iba druhú značky z riadky by sme robili nasledovné:

V [17]: odpoveď.xpath ('/ html // td [2]').extrakt ()

ZÁVER:

Xpath je veľmi efektívny spôsob analýzy súborov html a môže pomôcť minimalizovať použitie regulárnych výrazov pri ich analýze, pretože má obsahuje funkcia vo svojej syntaxi.

Existujú aj ďalšie knižnice, ktoré umožňujú analýzu pomocou Xpath, napríklad Selenium, pre automatizáciu webu. Xpath nám poskytuje veľa možností pri analýze html, ale to, čo bolo popísané v tomto článku, by malo byť schopné previesť vás cez bežné operácie syntaktickej analýzy html.

Kurzor pri písaní v systéme Windows 10 skáče alebo sa pohybuje náhodne
Ak zistíte, že kurzor myši skáče alebo sa pohybuje sám, automaticky a náhodne pri písaní na notebooku alebo počítači so systémom Windows, niektoré z t...
Ako zmeniť smer posúvania myši a touchpadu v systéme Windows 10
Myš a TouchpadNielenže uľahčujú výpočty, ale sú aj efektívnejšie a menej časovo náročné. Nemôžeme si predstaviť život bez týchto zariadení, ale je pra...
Ako zmeniť veľkosť, farbu a schému ukazovateľa myši a kurzora v systéme Windows 10
Ukazovateľ myši a kurzor vo Windows 10 sú veľmi dôležité aspekty operačného systému. Dá sa to povedať aj pre iné operačné systémy, takže v skutočnosti...