Strganje

Odpadanje z izbirniki XPath

Odpadanje z izbirniki XPath
HTML je jezik spletnih strani in med odpiranjem in zapiranjem vsake spletne strani je veliko informacij html oznaka. Do tega je veliko načinov, vendar bi v tem članku to storili z izbirnikom Xpath prek Pythonove knjižnice Scrapy.

Knjižnica Scrapy je zelo zmogljiva knjižnica za strganje po spletu, ki je tudi enostavna za uporabo. Če tega še ne poznate, lahko sledite razpoložljivi vadnici o uporabi knjižnice Scrapy.

Ta vadnica zajema uporabo izbirnikov Xpath. Xpath uporablja pot, kot je sintaksa, za krmarjenje po vozliščih dokumentov XML. Uporabne so tudi pri krmarjenju po oznakah HTML.

Za razliko od vaje za Scrapy, bomo zaradi poenostavitve izvajali vse svoje operacije tukaj na terminalu. To pa ne pomeni, da Xpath ni mogoče uporabiti z ustreznim programom Scrapy, ampak jih je mogoče uporabiti v knjižnici razčlenitve parametra odziva.

Delali bomo s primerom.spletanje.com, saj je zelo preprosto in bi pomagalo razumeti koncepte.

Za uporabo scrapije v našem terminalu vnesite spodnji ukaz:

$ scrap shell http: // primer.spletanje.com

Obiskal bi spletno mesto in dobil potrebne informacije, nato pa nam pustil interaktivno lupino za delo. Videli bi poziv, kot je:

V [1]:

Od interaktivne seje bomo delali z odziv predmet.

Tukaj je videti naša sintaksa za večino tega članka:

V [1]: odgovor.xpath ('xpathsyntax').izvleček ()

Ta zgornji ukaz se uporablja za ekstrahiranje vseh ujemajočih se oznak v skladu s sintakso Xpath in nato shranjevanje na seznam.

V [2]: odgovor.xpath ('xpathsyntax').extract_first ()

Ta zgornji ukaz se uporablja za pridobivanje samo prve ujemajoče se oznake in jo shrani na seznam.
Zdaj lahko začnemo delati na sintaksi Xpath.

NAVIGACIJSKE OZNAKE

Krmarjenje po oznakah v Xpathu je zelo enostavno, potrebna je le poševnica naprej / /, ki ji sledi ime oznake.

V [3]: odgovor.xpath ('/ html').izvleček ()

Zgornji ukaz bi vrnil datoteko html in vse, kar vsebuje kot posamezen element na seznamu.

Če želimo dobiti telo spletne strani, bi uporabili naslednje:

V [4]: ​​odgovor.xpath ('/ html / body').izvleček ()

Xpath omogoča tudi nadomestni znak "*", ki se ujema z vsem na ravni, v kateri je uporabljen.

V [5]: odgovor.xpath ('/ *').izvleček ()

Zgornja koda bi se ujemala z vsem v dokumentu. Enako se zgodi, ko uporabimo '/ html'.

V [6]: odgovor.xpath ('/ html / *').izvleček ()

Poleg krmarjenja po oznakah lahko s pomočjo znaka "//" dobimo vse potomce oznak določene oznake.

V [7]: odgovor.xpath ('/ html // a').izvleček ()

Zgornja koda bi vrnila vse sidrne oznake v oznaki html i.e. vrnil bi seznam vseh sidrnih oznak potomcev.

OZNAKE PO ATRIBUTIH IN NJIHOVE VREDNOSTI

Včasih je lahko krmarjenje po oznakah html do želene oznake težavno. Te težave lahko preprečite tako, da preprosto poiščete potrebno oznako po njenem atributu.

V [8]: odgovor.xpath ('/ html // div [@id = "pagination"]').izvleček ()

Zgornja koda vrne vse datoteke div oznake pod html oznako, ki ima id atribut z vrednostjo paginacija.

V [9]: odgovor.xpath ('/ html // div [@class = "span12"]').izvleček ()

Zgornja koda bi vrnila seznam vseh div oznake pod oznako html, le če imajo atribut razreda z vrednostjo razpon12.

Kaj pa, če ne poznate vrednosti atributa? In vse, kar želite, je, da dobite oznake z določenim atributom, brez skrbi glede njegove vrednosti. Tudi to je enostavno, vse kar morate storiti je, da uporabite samo simbol @ in atribut.

V [10]: odgovor.xpath ('/ html // div [@class]').izvleček ()

Ta koda bi vrnila seznam vseh oznak div, ki vsebujejo atribut razreda, ne glede na to, kakšno vrednost ima ta atribut razreda.

Kaj pa, če poznate le nekaj znakov, ki jih vsebuje vrednost atributa? Prav tako je mogoče dobiti takšne oznake.

V [11]: odgovor.xpath ('/ html // div [vsebuje (@id, "ion")]').izvleček ()

Zgornja koda bi vrnila vse oznake div pod oznako html, ki imajo atribut id, vendar ne vemo, kakšno vrednost ima atribut, razen če vemo, da vsebuje ion.

Stran, ki jo razčlenjujemo, ima v tej kategoriji samo eno oznako, vrednost pa je »paginacija«, zato bi bila vrnjena.

Cool desno?

OZNAKE PO NJIHOVEM BESEDILU

Ne pozabite, da smo oznake prej ujemali z njihovimi atributi. Oznake lahko primerjamo tudi po njihovem besedilu.

V [12]: odgovor.xpath ('/ html // a [.= "Alžirija"] ').izvleček ()

Zgornja koda bi nam pomagala dobiti vse sidrne oznake, v katerih je besedilo "Alžirija". Opomba: To morajo biti oznake z natančno to besedilno vsebino.

Čudovito.

Kako pa, če ne vemo natančno besedilne vsebine in poznamo le nekaj besedilne vsebine? To lahko storimo tudi mi.

V [13]: odgovor.xpath ('/ html // a [vsebuje (besedilo (), "A")]').izvleček ()

Zgornja koda bi dobila oznake, ki imajo v besedilni vsebini črko "A".

IZDELAVA VSEBINE TAG

Ves čas smo govorili o iskanju pravih oznak. Čas je, da izvlečemo vsebino oznake, ko jo najdemo.

Precej preprosto je. Vse kar moramo storiti je, da v sintakso dodamo »/ text ()« in vsebina oznake bi bila izvlečena.

V [14]: odgovor.xpath ('/ html // a / text ()').izvleček ()

Zgornja koda bi dobila vse sidrne oznake v dokumentu html in nato izvlekla besedilno vsebino.

IZDELAVA POVEZAV

Zdaj, ko vemo, kako izvleči besedilo iz oznak, bi morali vedeti, kako izvleči vrednosti atributov. Največkrat so vrednosti atributov, ki so za nas izredno pomembne, povezave.

To je skoraj enako kot ekstrahiranje besedilnih vrednosti, vendar bi namesto "/ text ()" uporabili simbol "/ @" in ime atributa.

V [15]: odgovor.xpath ('/ html // a / @ href').izvleček ()

Zgornja koda bi izvlekla vse povezave v sidrnih oznakah, povezave naj bi bile vrednosti href atribut.

NAVIGACIJSKE SIBLING TAG

Če ste opazili, smo ves čas krmarili po oznakah. Vendar obstaja ena situacija, ki se je nismo lotili.

Kako izberemo določeno oznako, če so oznake z istim imenom na isti ravni?




Afganistanu




Alandski otoki


V primeru, kakršnega imamo zgoraj, bi lahko, če bi ga pogledali, rekli, da bi ga uporabili extract_first () da dobim prvo tekmo.

Kaj pa, če se želimo ujemati z drugim? Kaj pa, če je možnosti več kot deset, mi pa želimo peto? Na to bomo odgovorili zdaj.

Tu je rešitev: Ko zapišemo sintakso Xpath, postavimo želeno oznako v oglate oklepaje, tako kot indeksiramo, vendar se indeks začne na 1.

Če pogledate html spletne strani, s katero imamo opravka, bi opazili, da jih je veliko oznake na isti ravni. Da dobim tretjega oznako, bi uporabili naslednjo kodo:

V [16]: odgovor.xpath ('/ html // tr [3]').izvleček ()

Opazili boste tudi, da oznake so v dvoje, če želimo le drugo oznake iz vrstice bi naredili naslednje:

V [17]: odgovor.xpath ('/ html // td [2]').izvleček ()

ZAKLJUČEK:

Xpath je zelo močan način za razčlenitev datotek html in bi lahko pomagal zmanjšati uporabo regularnih izrazov pri njihovem razčlenjevanju, saj ima vsebuje v svoji sintaksi.

Obstajajo tudi druge knjižnice, ki omogočajo razčlenitev z Xpathom, kot je Selenium za spletno avtomatizacijo. Xpath nam daje veliko možnosti med razčlenjevanjem html-a, toda to, kar je bilo obravnavano v tem članku, bi vas moralo voditi skozi običajne postopke razčlenjevanja html-a.

Kako uporabiti Xdotool za spodbujanje klikov in pritiskov mišk v Linuxu
Xdotool je brezplačno in odprtokodno orodje za ukazno vrstico, ki simulira klike in pritiske tipk. Ta članek bo zajemal kratek vodnik o uporabi xdotoo...
Najboljših 5 izdelkov z ergonomsko računalniško miško za Linux
Ali dolgotrajna uporaba računalnika povzroča bolečine v zapestju ali prstih? Ali imate trde sklepe in bi se morali neprestano tresti z rokami? Ali čut...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...