Érdes

Selejtezés XPath választókkal

Selejtezés XPath választókkal
A HTML a weboldalak nyelve, és minden weboldal nyitása és bezárása között rengeteg információ lóg html címke. Sokféle módon lehet ezt elérni, azonban ebben a cikkben ezt az Xpath választóval használjuk a Python Scrapy könyvtárán keresztül.

A Scrapy könyvtár egy nagyon hatékony webes kaparó könyvtár, könnyen használható. Ha még nem ismeri ezt, kövesse a rendelkezésre álló oktatóanyagot a Scrapy könyvtár használatáról.

Ez az oktatóanyag az Xpath választók használatát ismerteti. Az Xpath az elérési utat, például a szintaxist használja az XML-dokumentumok csomópontjainak navigálásához. Hasznosak a HTML-címkék navigálásában is.

A Scrapy oktatóanyagtól eltérően minden műveletet itt fogunk végezni a terminálon az egyszerűség kedvéért. Ez nem azt jelenti, hogy az Xpath nem használható a megfelelő Scrapy programmal, de felhasználhatók az elemzési könyvtárban a válaszparaméteren.

A példával fogunk dolgozni.webkaparás.com webhely, mivel nagyon egyszerű és segítene a fogalmak megértésében.

A selejt használatához terminálunkban írja be az alábbi parancsot:

$ scrapy shell http: // példa.webkaparás.com

Meglátogatja a webhelyet, és megkapja a szükséges információkat, majd egy interaktív héjat hagy nekünk, amellyel dolgozhatunk. Látnia kell egy ilyen felszólítást:

[1] -ban:

Az interaktív munkamenettől kezdve a válasz tárgy.

Így néz ki a szintaxisunk a cikk nagy részében:

In [1]: válasz.xpath ('xpathsyntax').kivonat()

Ez a fenti parancs az összes illesztett címke kivonására szolgál az Xpath szintaxisa szerint, majd egy listában tárolja.

In [2]: válasz.xpath ('xpathsyntax').extract_first ()

Ez a fenti parancs csak az első egyező címke kivonására szolgál, és egy listában tárolja.
Most elkezdhetjük az Xpath szintaxis kidolgozását.

Navigációs címkék

Az Xpath-ban a címkékben való navigálás nagyon egyszerű, csak az elővágáshoz szükséges perjel „/”, majd a címke neve szükséges.

In [3]: válasz.xpath ('/ html').kivonat()

A fenti parancs visszaadná a html címke és minden, amit egyetlen elemként tartalmaz a listában.

Ha meg akarjuk szerezni a weboldal törzsét, akkor a következőket használjuk:

In [4]: ​​válasz.xpath ('/ html / body').kivonat()

Az Xpath engedélyezi a „*” helyettesítő karaktert is, amely mindenre megegyezik a használat szintjén.

In [5]: válasz.xpath ('/ *').kivonat()

A fenti kód meg fog egyezni a dokumentumban szereplőekkel. Ugyanez történik, amikor a '/ html' szót használjuk.

In [6]: válasz.xpath ('/ html / *').kivonat()

A címkékben történő navigálás mellett a „//” használatával megszerezhetjük egy adott címke összes leszármazott címkéjét.

In [7]: válasz.xpath ('/ html // a').kivonat()

A fenti kód az összes horgonycímkét visszaadja az i html címke alatt.e. visszaadná az összes leszármazott horgonycímke listáját.

MEGJEGYZÉSEK MEGHATÁROZÁSOK ÉS ÉRTÉKeik szerint

Néha gondot okozhat a HTML-címkékben történő navigálás a szükséges címkéhez való eljutáshoz. Ez a probléma elhárítható azzal, hogy egyszerűen megtalálja a szükséges címkét az attribútuma alapján.

In [8]: válasz.xpath ('/ html // div [@id = "lapozás"]').kivonat()

A fenti kód az összes div címkék a html tag, amelyek rendelkeznek a id értékű attribútum lapszámozás.

In [9]: válasz.xpath ('/ html // div [@class = "span12"]').kivonat()

A fenti kód visszaadja az összes div címkék a html címke alatt, csak akkor, ha rendelkeznek class értékkel span12.

Mi van, ha nem tudja az attribútum értékét? És csak annyit szeretne, hogy címkéket szerezzen egy adott attribútummal, és ne aggódjon az értéke miatt. Ez is egyszerű, csak annyit kell tennie, hogy csak a @ szimbólumot és az attribútumot használja.

In [10]: válasz.xpath ('/ html // div [@ class]').kivonat()

Ez a kód visszaadná az összes div címke listáját, amelyek az class attribútumot tartalmazzák, függetlenül attól, hogy az class attribútum milyen értéket tartalmaz.

Mi lenne, ha csak pár karaktert tudna megadni egy attribútum értékében? Az ilyen típusú címkék beszerzése is lehetséges.

In [11]: válasz.xpath ('/ html // div [tartalmazza (@id, "ion")]').kivonat()

A fenti kód visszaadja az összes div taget a html címke alatt, amelyek rendelkeznek az id attribútummal, azonban nem tudjuk, hogy az attribútum milyen értéket tartalmaz, csak azt, hogy tudjuk, hogy „ion” -t tartalmaz.

Az általunk elemzett oldalon csak egy címke van ebben a kategóriában, és az értéke „lapozás”, tehát visszaadná.

Rendben?

Címkék a szövegük alapján

Ne feledje, hogy a címkéket korábban egyeztettük az attribútumaikkal. A címkéket szövegük alapján is egyeztethetjük.

In [12]: válasz.xpath ('/ html // a [.= "Algéria"] ').kivonat()

A fenti kód segít abban, hogy megszerezzük az összes horgonycímkét, amelyekben szerepel az „Algéria” szöveg. Megjegyzés: Címkéknek kell lenniük pontosan ilyen szöveges tartalommal.

Csodálatos.

Mi lenne, ha nem tudnánk a pontos szöveges tartalmat, és csak néhányat ismernénk a szöveges tartalomból? Megtehetjük ezt is.

In [13]: válasz.xpath ('/ html // a [tartalmazza (text (), "A")]' ').kivonat()

A fenti kód megkapja azokat a címkéket, amelyek szövegtartalmában „A” betű található.

KIVONÓ CÍMKETARTALOM

Végig arról beszéltünk, hogy megtaláljuk a megfelelő címkéket. Itt az ideje, hogy kivonjuk a címke tartalmát, amikor megtaláljuk.

Nagyon egyszerű. Csak annyit kell tennünk, hogy hozzáadjuk a „/ text ()” szót a szintaxishoz, és a címke tartalma kibontásra kerül.

In [14]: válasz.xpath ('/ html // a / text ()').kivonat()

A fenti kód megkapja az összes horgonycímkét a html dokumentumban, majd kibontja a szöveges tartalmat.

A LINKEK KIVONÁSA

Most, hogy tudjuk, hogyan kell kibontani a szöveget a címkékben, akkor tudnunk kell, hogyan lehet kibontani az attribútumok értékeit. Legtöbbször a számunkra kiemelten fontos attribútumok értékei linkek.

Ez majdnem megegyezik a szöveges értékek kibontásával, azonban a „/ text ()” helyett a „/ @” szimbólumot és az attribútum nevét használnánk.

In [15]: válasz.xpath ('/ html // a / @ href').kivonat()

A fenti kód az összes hivatkozást kibontja a horgonycímkékből, a hivatkozások állítólag a href tulajdonság.

NAVIGÁLÓ SIBLING CÍMKÉK

Ha észrevette, addig navigáltuk a címkéket. Van azonban egy olyan helyzet, amelyet nem oldottunk meg.

Hogyan válasszuk ki az adott címkét, ha az azonos nevű címkék azonos szinten vannak?




Afganisztán




Aland-szigetek


A fentiekhez hasonló esetben, ha meg akarjuk nézni, azt mondhatnánk, hogy használnánk extract_first () hogy megszerezzem az első mérkőzést.

Mi a helyzet azonban, ha meg akarjuk egyezni a másodikat? Mi van, ha tíznél több lehetőség van, és az ötödiket akarjuk? Most erre fogunk válaszolni.

Itt van a megoldás: Amikor megírjuk az Xpath szintaxisunkat, akkor a kívánt címke helyzetét szögletes zárójelbe tesszük, ugyanúgy, mint indexeljük, de az index értéke 1-től kezdődik.

Megtekintve a weboldalunk HTML-jét, amellyel foglalkozunk, észreveheti, hogy nagyon sok azonos szintű címkék. A harmadik megszerzéséhez címkét, a következő kódot használnánk:

In [16]: válasz.xpath ('/ html // tr [3]').kivonat()

Azt is észrevenné, hogy a a címkék kettesben vannak, ha csak a másodikat akarjuk címkék a sorokat tennénk a következők szerint:

In [17]: válasz.xpath ('/ html // td [2]').kivonat()

KÖVETKEZTETÉS:

Az Xpath egy nagyon hatékony módszer a HTML fájlok elemzésére, és minimalizálhatja a reguláris kifejezések használatát az elemzés során, tekintve, hogy rendelkezik a tartalmazza függvény a szintaxisában.

Vannak más könyvtárak, amelyek lehetővé teszik az Xpath elemzését, például a Selenium a webes automatizáláshoz. Az Xpath sok lehetőséget kínál nekünk a html elemzése közben, de az ebben a cikkben leírtaknak képesnek kell lenniük arra, hogy végigvigyen a szokásos html elemzési műveleteken.

A legjobb parancssori játékok Linuxhoz
A parancssor nem csak a legnagyobb szövetséges a Linux használatakor, hanem a szórakozás forrása is lehet, mert sok olyan szórakoztató játék lejátszás...
A legjobb Gamepad Mapping alkalmazások Linuxhoz
Ha egy tipikus billentyűzet és egér beviteli rendszer helyett szeretnél játékokat játszani Linuxon egy játékvezérlővel, van néhány hasznos alkalmazás ...
Hasznos eszközök Linux játékosok számára
Ha szeretsz Linuxon játszani, akkor valószínű, hogy olyan alkalmazásokat és segédprogramokat használtál, mint a Wine, a Lutris és az OBS Studio a játé...