Metāllūžņi

Metāllūžņi ar XPath selektoriem

Metāllūžņi ar XPath selektoriem
HTML ir tīmekļa lapu valoda, un starp katras tīmekļa lapas atvēršanu un aizvēršanu ir daudz informācijas html tagu. Tam var piekļūt daudzos veidos, taču šajā rakstā mēs to darīsim, izmantojot Xpath selektoru caur Python's Scrapy bibliotēku.

Scrapy bibliotēka ir ļoti spēcīga tīmekļa nokasīšanas bibliotēka, kuru ir viegli izmantot arī. Ja jums tas ir jauns, varat sekot pieejamai apmācībai par metāllūžņu bibliotēkas izmantošanu.

Šī apmācība aptver Xpath selektoru izmantošanu. Xpath izmanto ceļu, piemēram, sintaksi, lai pārvietotos XML dokumentu mezglos. Tie ir arī noderīgi, pārvietojoties HTML tagos.

Atšķirībā no Scrapy apmācības, vienkāršības labad mēs visas savas darbības veiksim šeit, terminālā. Tas nenozīmē, ka Xpath nevar izmantot kopā ar pareizo metāllūžņu programmu, tomēr tos var izmantot parsēšanas bibliotēkā ar atbildes parametru.

Mēs strādāsim ar piemēru.tīmekļa nokasīšana.com vietni, jo tā ir ļoti vienkārša un palīdzētu izprast jēdzienus.

Lai izmantotu metāllūžņus mūsu terminālā, ierakstiet tālāk norādīto komandu:

$ scrapy apvalks http: // piemērs.tīmekļa nokasīšana.com

Tas apmeklētu vietni un iegūtu nepieciešamo informāciju, pēc tam atstājot mums interaktīvu čaulu, ar kuru strādāt. Jums vajadzētu redzēt šādu uzvedni:

[1]:

Sākot no interaktīvās sesijas, mēs strādāsim ar atbildi objekts.

Lūk, kāda varētu būt mūsu sintakse lielākajai daļai šī raksta:

In [1]: atbilde.xpath ('xpathsyntax').ekstrakts()

Šo komandu iepriekš izmanto, lai izvilktu visus atbilstošos tagus atbilstoši Xpath sintaksei un pēc tam tos saglabātu sarakstā.

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

Šo komandu iepriekš izmanto, lai izvilktu tikai pirmo saskaņoto tagu un saglabātu to sarakstā.
Tagad mēs varam sākt strādāt pie Xpath sintakses.

NAVIGĀCIJAS TAGI

Navigācija tagos Xpath ir ļoti vienkārša. Vajadzīgs tikai uz priekšu slīpsvītra “/”, kam seko taga nosaukums.

In [3]: atbilde.xpath ('/ html').ekstrakts()

Iepriekš minētā komanda atgriezīs html tagu un visu, ko tas satur kā vienu vienumu sarakstā.

Ja mēs vēlamies iegūt tīmekļa lapas tekstu, mēs izmantotu:

In [4]: ​​atbilde.xpath ('/ html / body').ekstrakts()

Xpath atļauj aizstājējzīmi “*”, kas atbilst visam tajā līmenī, kādā tas tiek izmantots.

[5]: atbilde.xpath ('/ *').ekstrakts()

Iepriekš minētais kods atbildīs visam dokumentā iekļautajam. Tas pats notiek, kad mēs izmantojam '/ html'.

In [6]: atbilde.xpath ('/ html / *').ekstrakts()

Papildus navigācijai tagos, mēs varam iegūt visus konkrētā taga pēcnācēju tagus, izmantojot “//”.

In [7]: atbilde.xpath ('/ html // a').ekstrakts()

Iepriekš minētais kods atgriezīs visus enkura tagus zem HTML tagā i.e. tas atgriezīs visu pēcnācēju enkuru tagu sarakstu.

ATTIECĪBU UN TO VĒRTĪBU GRĀMATAS

Dažreiz, pārvietojoties HTML tagos, lai nokļūtu vajadzīgajā tagā, varētu būt problēmas. Šīs problēmas var novērst, vienkārši atrodot vajadzīgo tagu pēc tā atribūta.

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

Iepriekš minētais kods atgriež visu div tagi zem html tagu, kuram ir id atribūts ar vērtību lapošana.

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

Iepriekš minētais kods atgriezīs visu kodu sarakstu div tagus zem html taga tikai tad, ja tiem ir klases atribūts ar vērtību span12.

Ko darīt, ja nezināt atribūta vērtību? Un viss, ko vēlaties, ir iegūt tagus ar noteiktu atribūtu, neuztraucoties par tā vērtību. Tas ir arī vienkārši, viss, kas jums jādara, ir izmantot tikai @ simbolu un atribūtu.

In [10]: atbilde.xpath ('/ html // div [@ class]').ekstrakts()

Šis kods atgriezīs visu div tagu sarakstu, kas satur klases atribūtu, neatkarīgi no tā, kāda vērtība ir šīs klases atribūtam.

Kā būtu, ja zinātu tikai dažas rakstzīmes, kas ietvertas atribūta vērtībā? Ir iespējams iegūt arī šāda veida tagus.

[11]: atbilde.xpath ('/ html // div [satur (@id, "jons")]').ekstrakts()

Iepriekš minētais kods atgriezīs visus div tagus zem html taga, kuriem ir atribūts id, taču mēs nezinām, kāda vērtība ir atribūtam, izņemot to, ka mēs zinām, ka tas satur “jonu”.

Lapā, kuru mēs analizējam, šajā kategorijā ir tikai viens tags, un vērtība ir “lapošana”, tāpēc tā tiks atgriezta.

Forši labi?

TAGAS AR TEKSTU

Atcerieties, ka mēs iepriekš saskaņojām tagus pēc to atribūtiem. Mēs varam arī saskaņot tagus pēc to teksta.

In [12]: atbilde.xpath ('/ html // a [.= "Alžīrija"] ').ekstrakts()

Iepriekš minētais kods palīdzēs mums iegūt visus enkura tagus, kuros ir teksts “Alžīrija”. NB: Tam jābūt tagiem ar tieši tādu teksta saturu.

Brīnišķīgi.

Kā būtu, ja mēs nezinātu precīzā teksta saturā un zinām tikai dažus no teksta satura? Mēs to varam arī izdarīt.

[13]: atbilde.xpath ('/ html // a [satur (text (), "A")]').ekstrakts()

Iepriekš minētais kods iegūs tagus, kuru teksta satur burts “A”.

IEGŪT BAGAS SATURU

Visu laiku mēs runājām par pareizo tagu atrašanu. Ir pienācis laiks iegūt taga saturu, kad to atradīsim.

Tas ir diezgan vienkārši. Viss, kas mums jādara, ir sintaksei pievienot “/ text ()”, un taga saturs tiktu izvilkts.

In [14]: atbilde.xpath ('/ html // a / text ()').ekstrakts()

Iepriekš minētais kods iegūs visus enkura tagus HTML dokumentā un pēc tam izvilks teksta saturu.

SAITES IEGŪŠANA

Tagad, kad mēs zinām, kā iegūt tekstu tagos, mums jāzina, kā iegūt atribūtu vērtības. Visbiežāk mums vislielākās nozīmes atribūtu vērtības ir saites.

Tas ir gandrīz tāds pats kā teksta vērtību iegūšana, taču tā vietā, lai izmantotu “/ text ()”, mēs izmantotu simbolu “/ @” un atribūta nosaukumu.

[15]: atbilde.xpath ('/ html // a / @ href').ekstrakts()

Iepriekš minētais kods izvilktu visas saites enkura tagos, domājams, ka saites ir href atribūts.

NAVIGĀCIJAS SIBLING TAGI

Ja pamanījāt, mēs visu šo laiku esam pārvietojušies pa tagiem. Tomēr ir viena situācija, kuru mēs neesam risinājuši.

Kā mēs atlasām konkrētu tagu, ja tagi ar tādu pašu nosaukumu atrodas vienā līmenī?




Afganistāna




Alandes salas


Gadījumā, kāds mums ir iepriekš, ja mēs to vēlamies apskatīt, mēs varētu teikt, ka izmantosim extract_first () lai iegūtu pirmo maču.

Tomēr, ko darīt, ja mēs vēlamies saskaņot otro? Ko darīt, ja ir vairāk nekā desmit iespējas, un mēs vēlamies piekto? Mēs uz to tūlīt atbildēsim.

Šis ir risinājums: rakstot mūsu Xpath sintaksi, vēlamās atzīmes pozīcija tiek ievietota kvadrātiekavās, tāpat kā mēs indeksējam, bet indekss sākas ar 1.

Apskatot mūsu izveidotās tīmekļa lapas HTML, jūs pamanīsit, ka tur ir daudz tagus tajā pašā līmenī. Lai iegūtu trešo tagu, mēs izmantotu šādu kodu:

[16]: atbilde.xpath ('/ html // tr [3]').ekstrakts()

Jūs arī pamanīsit, ka tagi ir divatā, ja mēs vēlamies tikai otro tagus no rindas mēs darīsim šādi:

[17]: atbilde.xpath ('/ html // td [2]').ekstrakts()

SECINĀJUMS:

Xpath ir ļoti spēcīgs veids, kā parsēt HTML failus, un tas varētu palīdzēt samazināt regulāro izteiksmju izmantošanu to parsēšanā, ņemot vērā, ka tam ir satur funkcija savā sintaksē.

Ir arī citas bibliotēkas, kas ļauj parsēt ar Xpath, piemēram, Selenium tīmekļa automatizēšanai. Xpath dod mums daudz iespēju, analizējot html, taču šajā rakstā aprakstītajam jāspēj veikt jūs ar parastām html parsēšanas operācijām.

SuperTuxKart operētājsistēmai Linux
SuperTuxKart ir lielisks nosaukums, kas paredzēts, lai sniegtu jums Mario Kart pieredzi bez maksas jūsu Linux sistēmā. Tas ir diezgan izaicinoši un ja...
Cīņa par Vesnota apmācību
Cīņa par Vesnotu ir viena no populārākajām atvērtā koda stratēģijas spēlēm, kuru jūs varat spēlēt šajā laikā. Šī spēle ir izstrādāta ne tikai ļoti ilg...
0 A.D. Apmācība
No daudzajām stratēģijas spēlēm 0 A.D. izdodas izcelties kā visaptverošs nosaukums un ļoti dziļa, taktiska spēle, neskatoties uz to, ka tā ir atvērtā ...