Mengikis

Mengikis dengan Pemilih XPath

Mengikis dengan Pemilih XPath
HTML adalah bahasa laman web, dan terdapat banyak maklumat yang tergantung di antara pembukaan dan penutupan setiap laman web html teg. Terdapat banyak cara untuk mengaksesnya, namun dalam artikel ini kita akan melakukannya dengan menggunakan pemilih Xpath melalui perpustakaan Scrapy Python's.

Perpustakaan Scrapy adalah perpustakaan mengikis web yang sangat kuat, mudah digunakan juga. Sekiranya anda baru dalam hal ini, anda dapat mengikuti tutorial yang ada mengenai penggunaan perpustakaan Scrapy.

Tutorial ini merangkumi penggunaan pemilih Xpath. Xpath menggunakan jalan seperti sintaks untuk menavigasi nod dokumen XML. Mereka juga berguna dalam menavigasi tag HTML.

Tidak seperti dalam tutorial Scrapy, kami akan melakukan semua operasi kami di terminal ini demi kesederhanaan. Ini tidak bermaksud bahawa Xpath tidak dapat digunakan dengan program Scrapy yang tepat, namun Xpath dapat digunakan di perpustakaan parse pada parameter respons.

Kami akan bekerja dengan contoh.melayari laman web.laman web com, kerana sangat mudah dan akan membantu memahami konsep.

Untuk menggunakan scrapy di terminal kami, ketik perintah di bawah:

$ tempurung shell http: // contoh.melayari laman web.com

Ia akan melayari laman web ini dan mendapatkan maklumat yang diperlukan, kemudian meninggalkan shell interaktif untuk digunakan. Anda akan melihat arahan seperti:

Dalam [1]:

Dari sesi interaktif, kami akan bekerjasama dengan tindak balas objek.

Berikut adalah sintaks kami untuk sebahagian besar artikel ini:

Dalam [1]: tindak balas.xpath ('xpathsyntax').ekstrak ()

Perintah di atas digunakan untuk mengekstrak semua tag yang dipadankan mengikut sintaks Xpath dan kemudian menyimpannya dalam senarai.

Dalam [2]: tindak balas.xpath ('xpathsyntax').ekstrak_first ()

Perintah di atas digunakan untuk mengekstrak teg pertama yang dipadankan, dan menyimpannya dalam senarai.
Kita sekarang boleh mula mengerjakan sintaks Xpath.

TAG NAVIGATING

Menavigasi tag di Xpath sangat mudah, semua yang diperlukan adalah garis miring ke depan "/" diikuti dengan nama tag.

Dalam [3]: tindak balas.xpath ('/ html').ekstrak ()

Perintah di atas akan mengembalikan html tag dan semua kandungannya sebagai satu item dalam senarai.

Sekiranya kami ingin mendapatkan bahagian utama laman web, kami akan menggunakan yang berikut:

Dalam [4]: ​​tindak balas.xpath ('/ html / badan').ekstrak ()

Xpath juga membenarkan watak wildcard "*", yang sesuai dengan semua tahap di mana ia digunakan.

Dalam [5]: tindak balas.xpath ('/ *').ekstrak ()

Kod di atas akan sesuai dengan semua yang terdapat dalam dokumen. Perkara yang sama berlaku semasa kita menggunakan '/ html'.

Dalam [6]: tindak balas.xpath ('/ html / *').ekstrak ()

Di samping menavigasi tag, kita dapat memperoleh semua keturunan tag tertentu dengan menggunakan "//".

Dalam [7]: tindak balas.xpath ('/ html // a').ekstrak ()

Kod di atas akan mengembalikan semua tanda sauh di bawah tag html i.e. ia akan mengembalikan senarai semua tanda sauh keturunan.

TAG MENGIKUT SIKAP DAN NILAI MEREKA

Kadang-kadang, menavigasi tag html untuk sampai ke tag yang diperlukan boleh menjadi masalah. Masalah ini dapat diatasi dengan hanya mencari tanda yang diperlukan berdasarkan atributnya.

Dalam [8]: tindak balas.xpath ('/ html // div [@id = "pagination"]').ekstrak ()

Kod di atas mengembalikan semua div tag di bawah html tag yang mempunyai ID atribut dengan nilai penomboran.

Dalam [9]: tindak balas.xpath ('/ html // div [@class = "span12"]').ekstrak ()

Kod di atas akan mengembalikan senarai semua div tag di bawah tag html, hanya jika mereka mempunyai atribut kelas dengan nilai jangka masa12.

Bagaimana jika anda tidak mengetahui nilai atribut? Dan yang anda mahukan hanyalah mendapatkan tag dengan atribut tertentu, tanpa mempedulikan nilainya. Melakukan ini juga mudah, yang perlu anda lakukan hanyalah menggunakan simbol @ dan atribut.

Dalam [10]: tindak balas.xpath ('/ html // div [@class]').ekstrak ()

Kod ini akan mengembalikan senarai semua tag div yang mengandungi atribut kelas tanpa mengira nilai apa yang dimiliki atribut kelas.

Bagaimana jika anda hanya mengetahui beberapa watak yang terdapat dalam nilai atribut? Anda juga boleh mendapatkan tag jenis itu.

Dalam [11]: tindak balas.xpath ('/ html // div [mengandungi (@id, "ion")]').ekstrak ()

Kod di atas akan mengembalikan semua tag div di bawah tag html yang mempunyai atribut id, namun kita tidak tahu nilai apa yang dimiliki atribut kecuali kita tahu ia mengandungi "ion".

Halaman yang kami uraikan hanya memiliki satu tag dalam kategori ini, dan nilainya adalah "penomboran" sehingga akan dikembalikan.

Sejuk betul?

TAG MENGIKUT TEKS MEREKA

Ingatlah bahawa kita memadankan teg dengan atributnya lebih awal. Kami juga dapat memadankan tag dengan teksnya.

Dalam [12]: tindak balas.xpath ('/ html // a [.= "Algeria"] ').ekstrak ()

Kod di atas akan membantu kita mendapatkan semua tanda sauh yang mempunyai teks "Algeria" di dalamnya. NB: Ini mestilah teg dengan kandungan teks yang tepat.

Hebat.

Bagaimana jika kita tidak tahu dalam kandungan teks yang tepat, dan kita hanya mengetahui beberapa kandungan teks? Kita juga boleh melakukannya.

Dalam [13]: tindak balas.xpath ('/ html // a [berisi (teks (), "A")]').ekstrak ()

Kod di atas akan mendapatkan tag yang mempunyai huruf "A" dalam kandungan teks mereka.

KANDUNGAN TAG EKSTRAK

Selama ini, kita telah bercakap mengenai mencari tanda yang betul. Sudah tiba masanya untuk mengekstrak kandungan teg apabila kita menemuinya.

Ia cukup sederhana. Yang perlu kita lakukan adalah menambahkan "/ text ()" ke sintaks, dan isi tag akan diekstrak.

Dalam [14]: tindak balas.xpath ('/ html // a / teks ()').ekstrak ()

Kod di atas akan mendapat semua tanda sauh dalam dokumen html, dan kemudian mengekstrak kandungan teks.

MENGHASILKAN PAKAIAN

Sekarang kita tahu bagaimana mengekstrak teks dalam tag, maka kita harus tahu cara mengekstrak nilai atribut. Selalunya, nilai atribut yang sangat penting bagi kita adalah pautan.

Melakukan ini hampir sama dengan mengekstrak nilai teks, namun alih-alih menggunakan "/ text ()" kita akan menggunakan simbol "/ @" dan nama atribut.

Dalam [15]: tindak balas.xpath ('/ html // a / @ href').ekstrak ()

Kod di atas akan mengekstrak semua pautan dalam tanda sauh, pautan tersebut seharusnya merupakan nilai dari href atribut.

TAG SIBLING NAVIGATING

Sekiranya anda perhatikan, kami telah menavigasi tag selama ini. Namun, ada satu situasi yang belum kita atasi.

Bagaimana kita memilih tag tertentu apabila tag dengan nama yang sama berada pada tahap yang sama?




Afghanistan




Kepulauan Aland


Dalam kes seperti yang kita ada di atas, jika kita melihatnya, kita mungkin mengatakan bahawa kita akan menggunakannya ekstrak_first () untuk mendapatkan perlawanan pertama.

Namun, bagaimana jika kita mahu menyamai yang kedua? Bagaimana jika ada lebih dari sepuluh pilihan dan kita mahukan yang kelima? Kami akan menjawabnya sekarang.

Inilah penyelesaiannya: Semasa kita menulis sintaks Xpath kita meletakkan kedudukan tanda yang kita inginkan dalam tanda kurung, sama seperti kita mengindeks tetapi indeks bermula pada 1.

Melihat html laman web yang kami hadapi, anda akan menyedari bahawa terdapat banyak tag pada tahap yang sama. Untuk mendapat yang ketiga tag, kami akan menggunakan kod berikut:

Dalam [16]: tindak balas.xpath ('/ html // tr [3]').ekstrak ()

Anda juga akan menyedari bahawa tag ada dua, jika kita mahukan yang kedua sahaja tag dari baris kami akan melakukan perkara berikut:

Dalam [17]: tindak balas.xpath ('/ html // td [2]').ekstrak ()

KESIMPULAN:

Xpath adalah cara yang sangat kuat untuk mengurai fail html, dan dapat membantu meminimumkan penggunaan ungkapan biasa dalam menguraikannya memandangkan ia mempunyai mengandungi berfungsi dalam sintaksnya.

Terdapat perpustakaan lain yang membenarkan penguraian dengan Xpath seperti Selenium untuk automasi web. Xpath memberi kami banyak pilihan semasa menghuraikan html, tetapi apa yang telah dirawat dalam artikel ini harus dapat membawa anda melalui operasi penghuraian html biasa.

Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...
SuperTuxKart untuk Linux
SuperTuxKart adalah tajuk hebat yang direka untuk membawa anda pengalaman Mario Kart secara percuma pada sistem Linux anda. Ia cukup mencabar dan meny...
Tutorial Battle for Wesnoth
The Battle for Wesnoth adalah salah satu permainan strategi sumber terbuka paling popular yang boleh anda mainkan pada masa ini. Bukan hanya permainan...