Vanametalli

Vanarauad XPathi valijatega

Vanarauad XPathi valijatega
HTML on veebilehtede keel ja iga veebilehe avamise ja sulgemise vahel ripub palju teavet HTML silt. Sellele juurdepääsemiseks on palju võimalusi, kuid selles artiklis teeme seda Xpath-valija abil Pythoni sissekoguteegi kaudu.

Scrapy raamatukogu on väga võimas veebi kraapimise teek, mida on samuti lihtne kasutada. Kui olete selles uus, võite järgida olemasolevat õpetust Scrapy teegi kasutamiseks.

See õpetus hõlmab Xpath-valijate kasutamist. Xpath kasutab XML-dokumentide sõlmedes liikumiseks teed nagu süntaks. Need on kasulikud ka HTML-i siltide navigeerimisel.

Erinevalt Scrapy õpetusest teeme lihtsuse huvides kõik oma toimingud siin terminalis. See ei tähenda, et Xpathi ei saa kasutada õige Scrapy programmiga, kuid neid saab kasutada vastuseparameetri parsimise teegis.

Töötame näitega.veebi kraapimine.com saidil, kuna see on väga lihtne ja aitaks mõistetest aru saada.

Meie terminalis romude kasutamiseks sisestage allolev käsk:

$ scrapy shell http: // näide.veebi kraapimine.com

See külastaks saiti ja saaks vajalikku teavet, seejärel jätaks meile interaktiivse kestaga töötamise. Peaksite nägema sellist viiba:

[1]:

Interaktiivsest seansist alates töötame koos vastus objekt.

Siinne näeb meie süntaks enamiku selle artikli jaoks välja:

[1]: vastus.xpath ('xpathsyntax').väljavõte ()

Seda ülaltoodud käsku kasutatakse kõigi sobitatud siltide eraldamiseks vastavalt Xpathi süntaksile ja seejärel salvestatakse see loendisse.

[2]: vastus.xpath ('xpathsyntax').väljavõte_ esimene ()

Seda ülaltoodud käsku kasutatakse ainult esimese sobitatud sildi eraldamiseks ja selle salvestamiseks loendisse.
Nüüd saame hakata töötama Xpathi süntaksiga.

NAVIGEERIMISMÄRGID

Xpathis on märgendites navigeerimine väga lihtne, vaja on ainult kaldkriipsu "/", millele järgneb sildi nimi.

[3]: vastus.xpath ('/ html').väljavõte ()

Ülaltoodud käsk tagastab HTML silt ja kõik see sisaldab loendis ühe üksusena.

Kui soovime saada veebilehe sisu, kasutaksime järgmist:

[4]: vastus.xpath ('/ html / body').väljavõte ()

Xpath lubab ka metamärki “*”, mis sobib kõik tasemel, milles seda kasutatakse.

[5]: vastus.xpath ('/ *').väljavõte ()

Ülaltoodud kood sobitub dokumendis sisalduvaga. Sama asi juhtub ka siis, kui kasutame '/ html'.

[6]: vastus.xpath ('/ html / *').väljavõte ()

Lisaks siltide navigeerimisele saame kõik märgendi järeltulijad sildid, kasutades //.

[7]: vastus.xpath ('/ html // a').väljavõte ()

Ülaltoodud kood tagastaks kõik ankurdussildid HTML-i märgendi all.e. see tagastaks kõigi järeltulevate ankrumärkide loendi.

MÄRGID OMADUSTE JA NENDE VÄÄRTUSTE JÄRGI

Mõnikord võib HTML-i siltide abil navigeerimine vajalikule märgendile jõudmiseks olla probleem. Selle häda saab vältida, kui lihtsalt vajaliku sildi selle atribuudi järgi leida.

[8]: vastus.xpath ('/ html // div [@id = "pagination"]').väljavõte ()

Ülaltoodud kood tagastab kogu div sildid all HTML silt, millel on id atribuut väärtusega pagineerimine.

[9]: vastus.xpath ('/ html // div [@class = "span12"]').väljavõte ()

Ülaltoodud kood tagastab kõigi koodide loendi div HTML-märgendi all olevad sildid ainult siis, kui neil on klassi atribuut väärtusega span12.

Mis siis, kui te ei tea atribuudi väärtust? Ja kõik, mida soovite, on hankida kindla atribuudiga sildid, muretsemata selle väärtuse pärast. Ka selle tegemine on lihtne, vaja on kasutada ainult sümbolit @ ja atribuuti.

[10]: vastus.xpath ('/ html // div [@class]').väljavõte ()

See kood tagastab loendi kõigist div-siltidest, mis sisaldavad klassi atribuuti, olenemata sellest, millist väärtust see klassi atribuut omab.

Kuidas oleks, kui teaksite ainult paari märki, mis sisaldub atribuudi väärtuses? Samuti on võimalik seda tüüpi silte hankida.

[11]: vastus.xpath ('/ html // div [sisaldab (@id, "ioon")]' ').väljavõte ()

Ülaltoodud kood tagastab kõik HTML-märgendi all olevad div-märgendid, millel on atribuut id, kuid me ei tea, millist väärtust see atribuut omab, välja arvatud see, et me teame, et see sisaldab "iooni".

Meie analüüsitaval lehel on selles kategoorias ainult üks silt ja väärtuseks on „pagination”, nii et see tagastataks.

Lahe õige?

MÄRGID NENDE TEKSTI JÄRGI

Pidage meeles, et sobitasime sildid nende atribuutide järgi varem. Sildid saame sobitada ka nende teksti järgi.

[12]: vastus.xpath ('/ html // a [.= "Alžeeria"] ').väljavõte ()

Ülaltoodud kood aitaks meil kätte saada kõik ankrumärgendid, milles on tekst “Alžeeria”. NB! Need peavad olema täpselt selle tekstisisuga sildid.

Imeline.

Kuidas oleks, kui me ei tea täpselt teksti sisus ja teame ainult mõnda teksti sisust? Saame ka seda teha.

[13]: vastus.xpath ('/ html // a [sisaldab (text (), "A")]').väljavõte ()

Ülaltoodud kood saab sildid, mille teksti sisus on täht A.

MÄRGISISU EHITAMINE

Oleme kogu aeg rääkinud õigete siltide leidmisest. Aeg on sildi sisu välja tõmmata, kui selle leiame.

See on üsna lihtne. Kõik, mida peame tegema, on süntaksi lisamine „/ text ()” ja sildi sisu ekstraheeritakse.

[14]: vastus.xpath ('/ html // a / text ()').väljavõte ()

Ülaltoodud kood saaks kõik HTML-dokumendis olevad ankrusildid ja ekstraheeriks seejärel teksti sisu.

LINGIDE AVASTAMINE

Nüüd, kui teame, kuidas teksti siltidest välja tõmmata, peaksime teadma, kuidas atribuutide väärtusi välja tõmmata. Enamasti on meie jaoks ülitähtsate atribuutide väärtused lingid.

See on peaaegu sama mis tekstiväärtuste väljavõtmine, kuid „/ text ()” asemel kasutaksime sümbolit „/ @” ja atribuudi nime.

[15]: vastus.xpath ('/ html // a / @ href').väljavõte ()

Ülaltoodud kood ekstraheerib kõik ankrumärgendites olevad lingid, lingid peaksid olema väärtused href atribuut.

NAVIGEERIVAD SIBLING MÄRGID

Kui märkasite, oleme selle aja jooksul kõigil siltidel navigeerinud. Siiski on üks olukord, mida me pole lahendanud.

Kuidas valida konkreetne silt, kui samanimelised sildid on samal tasemel?




Afganistan




Alandi saared


Sellisel juhul, nagu meil on eespool, võiksime seda vaadata, kui me seda vaatame väljavõte_ esimene () esimese matši saamiseks.

Ent mis siis, kui tahame teisega sobitada? Mis siis, kui võimalusi on rohkem kui kümme ja me tahame viiendat? Sellele vastame kohe.

Siin on lahendus: Xpathi süntaksit kirjutades paneme soovitud sildi asukoha nurksulgudesse, täpselt nagu indekseerime, kuid indeks algab 1-ga.

Vaadates meie veebisaidi HTML-i, märkate, et seal on palju sildid samal tasemel. Kolmanda saamiseks märgendit, kasutaksime järgmist koodi:

[16]: vastus.xpath ('/ html // tr [3]').väljavõte ()

Samuti märkaksite, et sildid on kahekesi, kui tahame ainult teist sildid ridu, teeme järgmist:

[17]: vastus.xpath ('/ html // td [2]').väljavõte ()

JÄRELDUS:

Xpath on väga võimas viis HTML-failide sõelumiseks ja aitab minimeerida regulaaravaldiste kasutamist nende sõelumisel, arvestades, et sellel on sisaldab funktsioon oma süntaksis.

On ka teisi teeke, mis lubavad Xpathiga sõeluda, näiteks veebiautomaatika jaoks Selenium. Xpath annab meile HTML-i sõelumisel palju võimalusi, kuid selles artiklis käsitletu peaks suutma teid levitada tavaliste HTML-i sõelumisoperatsioonide kaudu.

Kuidas kasutada AutoKeyt Linuxi mängude automatiseerimiseks
AutoKey on Linuxi ja X11 töölaua automatiseerimise utiliit, mis on programmeeritud Python 3, GTK ja Qt. Selle skriptimise ja MACRO funktsionaalsuse ab...
Kuidas näidata FPS-loendurit Linuxi mängudes
Linuxi mängimine sai suure tõuke, kui Valve teatas Steam-kliendi ja nende mängude Linuxi toest 2012. aastal. Sellest ajast peale on paljud AAA- ja ind...
Sid Meieri Civilization VI allalaadimine ja mängimine Linuxis
Sissejuhatus mängu Civilization 6 on kaasaegne kontseptsioon, mis tutvustati Age of Empires mängude sarjas. Idee oli üsna lihtne; alustaksite kõige põ...