Laužas

Laužymas su XPath selektoriais

Laužymas su XPath selektoriais
HTML yra tinklalapių kalba, o tarp kiekvieno tinklalapio atidarymo ir uždarymo yra daug informacijos HTML žyma. Yra daugybė būdų, kaip tai pasiekti, tačiau šiame straipsnyje tai darytume naudodami „Xpath“ selektorių per „Python“ įrašų biblioteką.

„Scrapy“ biblioteka yra labai galinga žiniatinklio grandymo biblioteka, kuria taip pat lengva naudotis. Jei jums tai dar nėra, galite vadovautis turima „Scrapy“ bibliotekos naudojimo instrukcija.

Ši pamoka apima „Xpath“ selektorių naudojimą. „Xpath“ naudoja kelią, pavyzdžiui, sintaksę, norėdamas naršyti XML dokumentų mazguose. Jie taip pat naudingi naršant HTML žymose.

Skirtingai nei „Scrapy“ pamokoje, paprastumo dėlei visas savo operacijas atliksime čia, terminale. Tai nereiškia, kad „Xpath“ negalima naudoti su tinkama „Scrapy“ programa, tačiau jie gali būti naudojami analizės bibliotekoje atsakymo parametre.

Dirbsime su pavyzdžiu.žiniatinklio apkapojimas.com svetainę, nes ji yra labai paprasta ir padėtų suprasti sąvokas.

Norėdami naudoti laužą mūsų terminale, įveskite žemiau esančią komandą:

$ scrapy shell http: // pavyzdys.žiniatinklio grandymas.com

Jis apsilankytų svetainėje ir gautų reikiamą informaciją, tada paliktų mums interaktyvų apvalkalą, su kuriuo galėtume dirbti. Turėtumėte pamatyti tokį raginimą:

[1]:

Nuo interaktyvios sesijos mes dirbsime su atsakymą objektas.

Štai kaip mūsų sintaksė atrodytų daugumai šio straipsnio:

[1]: atsakymas.„xpath“ („xpathsyntax“).ekstraktas ()

Ši komanda aukščiau naudojama norint išgauti visas suderintas žymas pagal „Xpath“ sintaksę ir tada jas išsaugoti sąraše.

[2]: atsakymas.„xpath“ („xpathsyntax“).extract_first ()

Ši komanda aukščiau naudojama norint išgauti tik pirmąją suderintą žymą ir išsaugoti ją sąraše.
Dabar galime pradėti dirbti su „Xpath“ sintakse.

NAVIGACIJOS ŽYMĖS

„Xpath“ naršyti žymose yra labai lengva, tereikia tik pasvirusio brūkšnio „/“, po kurio yra žymos pavadinimas.

[3]: atsakymas.xpath ('/ html').ekstraktas ()

Aukščiau pateikta komanda grąžins HTML žymą ir viską, ką joje yra, kaip vieną elementą sąraše.

Jei norime gauti tinklalapio turinį, mes naudotume:

[4]: atsakymas.xpath ('/ html / body').ekstraktas ()

„Xpath“ taip pat leidžia pakaitos simbolį „*“, kuris sutampa su visu lygiu, kuriame jis naudojamas.

[5]: atsakymas.xpath ('/ *').ekstraktas ()

Aukščiau pateiktas kodas atitiks viską, kas yra dokumente. Tas pats atsitinka, kai naudojame „/ html“.

[6]: atsakymas.xpath ('/ html / *').ekstraktas ()

Be naršymo pagal žymas, mes galime gauti visas tam tikros žymos palikuonių žymas naudodami „//“.

[7]: atsakymas.xpath ('/ html // a').ekstraktas ()

Aukščiau pateiktas kodas grąžins visas inkaro žymas, esančias HTML žymoje i.e. tai grąžins visų palikuonių inkarų žymių sąrašą.

ŽYMĖS PAGAL ATLIEKUMUS IR JŲ VERTĖS

Kartais naršant HTML žymose, norint patekti į reikiamą žymą, gali kilti problemų. Šios bėdos galima išvengti paprasčiausiai suradus reikiamą žymą pagal jos atributą.

[8]: atsakymas.xpath ('/ html // div [@id = "pagination"]').ekstraktas ()

Aukščiau pateiktas kodas pateikia visą div žymos po HTML žyma, turinti id atributas, kurio vertė yra pagonavimas.

[9]: atsakymas.xpath ('/ html // div [@class = "span12"]').ekstraktas ()

Aukščiau pateiktas kodas grąžins visų div žymos po HTML žyme, tik jei jos turi klasės atributą, kurio vertė yra 12.

Ką daryti, jei nežinote atributo vertės? Viskas, ko norite, yra gauti žymas su tam tikru atributu, nesijaudindami dėl jo vertės. Tai padaryti taip pat paprasta, tereikia naudoti tik simbolį @ ir atributą.

[10]: atsakymas.xpath ('/ html // div [@class]').ekstraktas ()

Šis kodas grąžins visų div žymų, kuriose yra klasės atributas, sąrašą, neatsižvelgiant į tai, kokią vertę tas klasės atributas turi.

Ką daryti, jei žinote tik keletą simbolių, esančių atributo vertėje? Taip pat įmanoma gauti tokio tipo žymas.

[11]: atsakymas.xpath ('/ html // div [yra (@id, "jonas")]').ekstraktas ()

Aukščiau pateiktas kodas grąžins visas „div“ žymes po „HTML“ žyma, turinčias atributą „id“, tačiau mes nežinome, kokią vertę turi šis atributas, išskyrus tai, kad žinome, kad jame yra „jonas“.

Puslapyje, kurį analizuojame, šioje kategorijoje yra tik viena žyma, o vertė yra „puslapiavimas“, todėl ji bus grąžinta.

Kietas teisus?

JŲ TEKSTO ŽYMĖS

Atminkite, kad žymas pagal jų atributus suderinome anksčiau. Žymas taip pat galime suderinti pagal jų tekstą.

[12]: atsakymas.xpath ('/ html // a [.= "Alžyras"] ').ekstraktas ()

Aukščiau pateiktas kodas padėtų mums gauti visas inkaro žymas, kuriose yra tekstas „Alžyras“. NB: Tai turi būti žymos su būtent tokiu teksto turiniu.

Nuostabu.

Ką daryti, jei nežinome tikslaus teksto turinio ir žinome tik keletą teksto turinio? Mes taip pat galime tai padaryti.

[13]: atsakymas.xpath ('/ html // a [yra (tekstas (), „A“)]').ekstraktas ()

Aukščiau pateiktas kodas gautų žymas, kurių teksto turinyje yra raidė „A“.

IŠTraukiantis ŽYMOS TURINYS

Visą laiką mes kalbėjome apie tinkamų žymų paiešką. Laikas išskleisti žymos turinį, kai ją rasime.

Tai gana paprasta. Viskas, ką mums reikia padaryti, tai į sintaksę įtraukti „/ text ()“, ir žymos turinys bus išgautas.

[14]: atsakymas.xpath ('/ html // a / text ()').ekstraktas ()

Aukščiau pateiktas kodas gautų visas inkaro žymas HTML dokumente ir ištrauktų teksto turinį.

NUORODŲ IŠTRAUKIMAS

Dabar, kai mes žinome, kaip išskleisti tekstą žymose, tada turėtume žinoti, kaip išskleisti atributų reikšmes. Dažniausiai mums svarbiausių atributų vertės yra nuorodos.

Tai padaryti yra beveik tas pats, kas išskleisti teksto reikšmes, tačiau užuot naudoję „/ text ()“, naudosime „/ @“ simbolį ir atributo pavadinimą.

[15]: atsakymas.xpath ('/ html // a / @ href„).ekstraktas ()

Aukščiau pateiktas kodas išgautų visas inkaro žymose esančias nuorodas, nuorodos turėtų būti href atributas.

NAVIGACIJOS SIBLING ŽYMĖS

Jei pastebėjote, mes visą laiką naršėme žymose. Tačiau yra viena situacija, kurios mes nesprendėme.

Kaip pasirinkti tam tikrą žymą, kai to paties pavadinimo žymos yra tame pačiame lygyje?




Afganistanas




Alandų salos


Tokiu atveju, kokį turime aukščiau, jei norėtume pažvelgti į jį, galėtume pasakyti, kad naudosime extract_first () gauti pirmąsias rungtynes.

Tačiau ką daryti, jei norime prilygti antram? Ką daryti, jei yra daugiau nei dešimt variantų ir mes norime penkto? Mes atsakysime į tai dabar.

Čia yra sprendimas: kai rašome savo „Xpath“ sintaksę, norimos žymos poziciją įdedame laužtiniuose skliaustuose, kaip ir indeksuojame, bet indeksas prasideda.

Žvelgdami į tinklalapio, su kuriuo susiduriame, HTML failą, pastebėtumėte, kad jo yra daug to paties lygio žymos. Norėdami gauti trečią žymą, mes naudotume šį kodą:

[16]: atsakymas.xpath ('/ html // tr [3]').ekstraktas ()

Jūs taip pat pastebėtumėte, kad žymos yra dviese, jei norime tik antros žymos iš eilutes atliktume taip:

[17]: atsakymas.xpath ('/ html // td [2]').ekstraktas ()

IŠVADA:

„Xpath“ yra labai galingas būdas analizuoti HTML failus ir gali padėti sumažinti įprastų išraiškų naudojimą juos analizuojant, atsižvelgiant į tai, kad jis turi yra funkcija savo sintaksėje.

Yra ir kitų bibliotekų, kurios leidžia analizuoti naudojant „Xpath“, pvz., „Selenium“ žiniatinklio automatizavimui. „Xpath“ suteikia mums daug galimybių analizuojant HTML, tačiau tai, kas buvo aptarta šiame straipsnyje, turėtų padėti atlikti įprastas HTML analizavimo operacijas.

Kaip atsisiųsti ir paleisti „Sid Meier Civilization VI“ sistemoje „Linux“
Įvadas į žaidimą „Civilization 6“ yra šiuolaikinė klasikinės koncepcijos, pristatytos „Age of Empires“ žaidimų serijoje, koncepcija. Idėja buvo gana p...
Kaip įdiegti ir žaisti „Doom“ sistemoje „Linux“
Įvadas į Doom „Doom“ serija atsirado 90-aisiais, išleidus originalų „Doom“. Tai buvo tiesioginis hitas, o nuo to laiko žaidimų serija gavo daugybę apd...
„Vulkan“, skirta „Linux“ vartotojams
Kiekvienos naujos kartos grafikos plokštės matome, kaip žaidimų kūrėjai peržengia grafinės ištikimybės ribas ir artėja prie fotorealizmo. Nepaisant vi...