kasar

Mengikis dengan Pemilih XPath

Mengikis dengan Pemilih XPath
HTML adalah bahasa halaman web, dan ada banyak informasi yang tergantung di antara pembukaan dan penutupan setiap halaman web html menandai. Ada banyak cara untuk mengakses ini, namun dalam artikel ini kita akan melakukannya menggunakan pemilih Xpath melalui perpustakaan Scrapy Python.

Perpustakaan Scrapy adalah perpustakaan scraping web yang sangat kuat, mudah digunakan juga. Jika Anda baru dalam hal ini, Anda dapat mengikuti tutorial yang tersedia tentang menggunakan perpustakaan Scrapy.

Tutorial ini mencakup penggunaan penyeleksi Xpath. Xpath menggunakan jalur seperti sintaks untuk menavigasi node dokumen XML. Mereka juga berguna dalam menavigasi tag HTML.

Tidak seperti di tutorial Scrapy, kita akan melakukan semua operasi kita di sini di terminal demi kesederhanaan. Ini tidak berarti bahwa Xpath tidak dapat digunakan dengan program Scrapy yang tepat, mereka dapat digunakan di perpustakaan parse pada parameter respons.

Kami akan bekerja dengan contoh.pengikisan web.com, karena sangat sederhana dan akan membantu memahami konsepnya.

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

$ cangkang kasar http://example.pengikisan web.com

Itu akan mengunjungi situs dan mendapatkan informasi yang dibutuhkan, kemudian meninggalkan kami dengan shell interaktif untuk bekerja dengan. Anda akan melihat prompt seperti:

Dalam [1]:

Dari sesi interaktif, kita akan bekerja dengan tanggapan obyek.

Inilah yang akan terlihat seperti sintaks untuk sebagian besar artikel ini:

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

Perintah di atas digunakan untuk mengekstrak semua tag yang cocok sesuai dengan sintaks Xpath dan kemudian menyimpannya dalam daftar.

Dalam [2]: tanggapan.xpath('xpathsyntax').ekstrak_pertama()

Perintah di atas digunakan untuk mengekstrak hanya tag pertama yang cocok, dan menyimpannya dalam daftar.
Kita sekarang dapat mulai mengerjakan sintaks Xpath.

TAG NAVIGASI

Menavigasi tag di Xpath sangat mudah, yang dibutuhkan hanyalah garis miring “/” diikuti dengan nama tag.

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

Perintah di atas akan mengembalikan html tag dan semua yang dikandungnya sebagai satu item dalam daftar.

Jika kita ingin mendapatkan isi halaman web, kita akan menggunakan yang berikut ini:

Dalam [4]: ​​tanggapan.xpath('/html/body').ekstrak()

Xpath juga mengizinkan karakter wildcard “*”, yang cocok dengan semua level di mana ia digunakan.

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

Kode di atas akan cocok dengan semua yang ada di dokumen. Hal yang sama terjadi ketika kita menggunakan '/ html'.

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

Selain tag navigasi, kita bisa mendapatkan semua tag turunan dari tag tertentu dengan menggunakan "//".

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

Kode di atas akan mengembalikan semua tag jangkar di bawah tag html i.e. itu akan mengembalikan daftar semua tag jangkar turunan.

TAG BERDASARKAN ATRIBUT DAN NILAINYA

Terkadang, menavigasi tag html untuk mendapatkan tag yang diperlukan bisa menjadi masalah. Masalah ini dapat dihindari hanya dengan menemukan tag yang dibutuhkan dengan atributnya.

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

Kode di atas mengembalikan semua div tag di bawah html tag yang memiliki Indo atribut dengan nilai paginasi.

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

Kode di atas akan mengembalikan daftar semua div tag di bawah tag html, hanya jika mereka memiliki atribut kelas dengan nilai rentang12.

Bagaimana jika Anda tidak tahu nilai atributnya?? Dan yang Anda inginkan hanyalah mendapatkan tag dengan atribut tertentu, tanpa mempedulikan nilainya. Melakukan ini juga sederhana, yang perlu Anda lakukan hanyalah menggunakan simbol @ dan atributnya saja.

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

Kode ini akan mengembalikan daftar semua tag div yang berisi atribut kelas terlepas dari nilai apa yang dimiliki atribut kelas itu.

Bagaimana jika Anda hanya mengetahui beberapa karakter yang terkandung dalam nilai suatu atribut?? Dimungkinkan juga untuk mendapatkan jenis tag tersebut.

Dalam [11]: tanggapan.xpath('/html//div[contains(@id, "ion")]').ekstrak()

Kode di atas akan mengembalikan semua tag div di bawah tag html yang memiliki atribut id, namun kita tidak tahu nilai apa yang dimiliki atribut tersebut kecuali bahwa kita tahu itu mengandung “ion”.

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

Keren kan?

TAG OLEH TEKS MEREKA

Ingat kami mencocokkan tag dengan atributnya sebelumnya. Kami juga dapat mencocokkan tag dengan teksnya.

Dalam [12]: tanggapan.xpath('/html//a[.= "Aljazair"]').ekstrak()

Kode di atas akan membantu kita mendapatkan semua tag jangkar yang memiliki teks "Aljazair" di dalamnya. NB: Itu harus berupa tag dengan konten teks yang persis seperti itu.

Hebat.

Bagaimana jika kita tidak mengetahui isi teks yang tepat, dan kita hanya mengetahui beberapa isi teks? Kita juga bisa melakukannya.

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

Kode di atas akan mendapatkan tag yang memiliki huruf "A" di konten teksnya.

MENGEKSTRAK KONTEN TAG

Selama ini, kita telah berbicara tentang menemukan tag yang tepat. Saatnya mengekstrak konten tag ketika kami menemukannya.

Ini cukup sederhana. Yang perlu kita lakukan adalah menambahkan "/ teks ()" ke sintaks, dan konten tag akan diekstraksi.

Dalam [14]: tanggapan.xpath('/html//a/text()').ekstrak()

Kode di atas akan mendapatkan semua tag jangkar dalam dokumen html, dan kemudian mengekstrak konten teks.

EKSTRAK LINK

Sekarang kita tahu cara mengekstrak teks dalam tag, maka kita harus tahu cara mengekstrak nilai atribut. Sering kali, nilai atribut yang paling penting bagi kami adalah tautan.

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

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

Kode di atas akan mengekstrak semua tautan di tag jangkar, tautan tersebut seharusnya merupakan nilai dari href atribut.

NAVIGASI TAG KASIH

Jika Anda perhatikan, kami telah menavigasi tag selama ini. Namun, ada satu situasi yang belum kami tangani.

Bagaimana kita memilih tag tertentu ketika tag dengan nama yang sama berada di level yang sama??




Afganistan




Pulau Aland


Dalam kasus seperti yang kita miliki di atas, jika kita melihatnya, kita mungkin mengatakan kita akan menggunakan ekstrak_pertama() untuk mendapatkan pertandingan pertama.

Namun, bagaimana jika kita ingin mencocokkan yang kedua? Bagaimana jika ada lebih dari sepuluh opsi dan kami menginginkan yang kelima?? Kami akan menjawabnya sekarang.

Inilah solusinya: Ketika kita menulis sintaks Xpath kita, kita menempatkan posisi tag yang kita inginkan dalam tanda kurung siku, sama seperti kita mengindeks tetapi indeks dimulai dari 1.

Melihat html halaman web yang sedang kita hadapi, Anda akan melihat bahwa ada banyak lot tag pada level yang sama. Untuk mendapatkan yang ketiga tag, kami akan menggunakan kode berikut:

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

Anda juga akan melihat bahwa tag ada dua, jika kita hanya menginginkan yang kedua tag dari baris kami akan melakukan hal berikut:

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

KESIMPULAN:

Xpath adalah cara yang sangat ampuh untuk mengurai file html, dan dapat membantu meminimalkan penggunaan ekspresi reguler dalam menguraikannya mengingat ia memiliki mengandung fungsi dalam sintaksnya.

Ada perpustakaan lain yang memungkinkan penguraian dengan Xpath seperti Selenium untuk otomatisasi web. Xpath memberi kami banyak pilihan saat mem-parsing html, tetapi apa yang telah dibahas dalam artikel ini seharusnya dapat membawa Anda melalui operasi penguraian html umum.

SuperTuxKart untuk Linux
SuperTuxKart adalah judul hebat yang dirancang untuk memberi Anda pengalaman Mario Kart gratis di sistem Linux Anda. Ini cukup menantang dan menyenang...
Pertempuran untuk Tutorial Westnoth
The Battle for Wesnoth adalah salah satu game strategi open source terpopuler yang bisa kamu mainkan saat ini. Tidak hanya game ini telah dikembangkan...
0 A.D. tutorial
Dari sekian banyak game strategi di luar sana, 0 A.D. berhasil menonjol sebagai judul yang komprehensif dan permainan taktis yang sangat dalam meskipu...