kasar

Scraping Web dengan Modul Scrapy Python

Scraping Web dengan Modul Scrapy Python
Keterampilan menggores web telah menjadi emas hari ini, jadi mari kita pelajari bagaimana kita bisa mendapatkan data yang dibutuhkan dari halaman web. Pada artikel ini, kita akan berbicara tentang library Scrapy Python, apa yang dapat dilakukan dan bagaimana menggunakannya. Mari kita mulai.

Mengapa Tergores??

Scrapy adalah perpustakaan pengikisan web yang kuat, yang menyediakan kemampuan untuk mengunduh halaman web, gambar, dan data apa pun yang dapat Anda pikirkan dengan kecepatan kilat. Kecepatan sangat penting dalam komputasi, dan Scrapy bekerja dalam hal ini dengan mengunjungi situs web secara tidak sinkron dan melakukan banyak pekerjaan latar belakang membuat seluruh tugas terlihat mudah.

Harus dikatakan bahwa Python memiliki perpustakaan lain yang dapat digunakan untuk mengikis data dari situs web, tetapi tidak ada yang sebanding dengan Scrapy dalam hal efisiensi.

Instalasi

Mari kita lihat sekilas bagaimana library yang kuat ini dapat diinstal pada mesin Anda.

Seperti kebanyakan library Python, Anda dapat menginstal Scrapy menggunakan modul pip:

pip menginstal Scrapy

Anda dapat memeriksa apakah instalasi berhasil dengan mengimpor scrapy di shell interaktif Python.

$ python
Python 3.5.2 (default, 14 Sep 2017, 22:51:06)
[GCC 5.4.0 20160609] di linux

Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut.

>>> impor scrapy

Sekarang setelah kita selesai dengan instalasi, mari kita masuk ke hal-hal yang penting.

Membuat Proyek Pengikisan Web

Selama instalasi, kata kunci scrapy ditambahkan ke jalur sehingga kami dapat menggunakan kata kunci langsung dari baris perintah. Kami akan memanfaatkan ini, selama kami menggunakan perpustakaan.

Dari direktori pilihan Anda jalankan perintah berikut:

scrapy startproject webscraper

Ini akan membuat direktori bernama pengikis web di direktori saat ini dan scrapy.file cfg. Dalam pengikis web  direktori akan memiliki __init__.py, item.py, middlewares.py, saluran pipa.py, pengaturan.py file dan direktori bernama laba-laba.

File laba-laba kami i.e. skrip yang melakukan webscraping untuk kami akan disimpan di laba-laba direktori.

Menulis Laba-laba Kami

Sebelum kita melanjutkan menulis spider kita, diharapkan kita sudah mengetahui website apa yang ingin kita coret. Untuk tujuan artikel ini, kami menggores situs web webscraping sampel: http://example.pengikisan web.com.

Situs web ini hanya memiliki nama negara dan benderanya, dengan halaman yang berbeda dan kami akan menghapus tiga halaman. Tiga halaman yang akan kami kerjakan adalah:

http://contoh.pengikisan web.com/places/default/index/0
http://contoh.pengikisan web.com/places/default/index/1
http://contoh.pengikisan web.com/places/default/index/2

Kembali ke laba-laba kita, kita akan membuat sample_spider.py di direktori spiders. Dari terminal, sederhana sentuh sample_spider.py perintah akan membantu membuat file baru.

Setelah membuat file, kami akan mengisinya dengan baris kode berikut:

impor scrapy
 
kelas SampleSpider(scrapy.Laba-laba):
nama = "contoh"
start_url = [
"http://contoh.pengikisan web.com/places/default/index/0",
"http://contoh.pengikisan web.com/places/default/index/1",
"http://contoh.pengikisan web.com/places/default/index/2"
]
 
def parse(sendiri, respons):
page_number = tanggapan.url.membagi('/')[-1]
file_name = "halaman.html".format(nomor_halaman)
dengan open(file_name, 'wb') sebagai file:
mengajukan.tulis (tanggapan.tubuh)

Dari tingkat atas direktori proyek, jalankan perintah berikut:

sampel perayapan kasar

Ingatlah bahwa kami memberikan ContohLaba-Laba kelas A nama atribut Sampel.

Setelah menjalankan perintah itu, Anda akan melihat bahwa tiga file bernama page0.html, halaman1.html, halaman2.html disimpan ke direktori.

Mari kita lihat apa yang terjadi dengan kode:

impor scrapy

Pertama kita mengimpor perpustakaan ke namespace kita.

kelas SampleSpider (bercak).Laba-laba):
nama = "contoh"

Kemudian kita membuat kelas laba-laba yang kita sebut Contoh Laba-laba. Laba-laba kami mewarisi dari kasar.laba-laba. Semua laba-laba kita harus mewarisi dari scrapy.laba-laba. Setelah membuat kelas, kami memberikan laba-laba kami nama atribut, ini nama atribut digunakan untuk memanggil laba-laba dari terminal. Jika Anda ingat, kami menjalankan sampel perayapan kasar perintah untuk menjalankan kode kami.

start_url = [
 
"http://contoh.pengikisan web.com/places/default/index/0",
"http://contoh.pengikisan web.com/places/default/index/1",
"http://contoh.pengikisan web.com/places/default/index/2"
]

Kami juga memiliki daftar url untuk dikunjungi laba-laba. Daftarnya harus dipanggil start_url. Jika Anda ingin memberi daftar nama yang berbeda, kami harus mendefinisikan a start_requests fungsi yang memberi kita lebih banyak kemampuan. Untuk mempelajari lebih lanjut, Anda dapat melihat dokumentasi scrapy.

Terlepas dari itu, jangan lupa untuk menyertakan http:// atau https:// untuk tautan Anda, jika tidak, Anda harus berurusan dengan kesalahan skema yang hilang.

def parse(diri, respons):

Kami kemudian melanjutkan untuk mendeklarasikan fungsi parse dan memberikannya parameter respons. Ketika kode dijalankan, fungsi parse dibangkitkan dan objek respons dikirim yang berisi semua informasi dari halaman web yang dikunjungi.

page_number = tanggapan.url.membagi('/')[-1]
file_name = "halaman.html".format(nomor_halaman)

Apa yang telah kami lakukan dengan kode ini adalah untuk membagi string yang berisi alamat dan menyimpan nomor halaman sendirian di a nomor halaman variabel. Kemudian kita buat nama file variabel memasukkan nomor halaman dalam string yang akan menjadi nama file dari file yang akan kita buat.

dengan open(file_name, 'wb') sebagai file:
mengajukan.tulis (tanggapan.tubuh)

Kami sekarang telah membuat file, dan kami menulis konten halaman web ke dalam file menggunakan tubuh atribut dari tanggapan obyek.

Kita bisa melakukan lebih dari sekedar menyimpan halaman web. Pustaka BeautifulSoup dapat digunakan untuk mengurai tubuh.tanggapan. Anda dapat melihat tutorial BeautiulSoup ini jika Anda tidak terbiasa dengan perpustakaan.

Dari halaman yang akan dihapus, berikut adalah kutipan html yang berisi data yang kita butuhkan:

Anda akan melihat bahwa semua data yang diperlukan terlampir dalam tag div, jadi kami akan menulis ulang kode untuk mengurai html.
Inilah skrip baru kami:

impor scrapy
dari bs4 impor BeautifulSoup
 
kelas SampleSpider(scrapy.Laba-laba):
nama = "contoh"
 
start_url = [
"http://contoh.pengikisan web.com/places/default/index/0",
"http://contoh.pengikisan web.com/places/default/index/1",
"http://contoh.pengikisan web.com/places/default/index/2"
]
 
def parse(diri, respons):
page_number = tanggapan.url.membagi('/')[-1]
file_name = "halaman.txt".format(nomor_halaman)
dengan open(file_name, 'w') sebagai file:
html_content = BeautifulSoup(tanggapan.tubuh, "lxml")
div_tags = html_content.temukan("div", "id": "hasil")
country_tags = div_tags.temukan_semua("div")
nama_negara_posisi = zip(rentang(len(tag_negara)), tag_negara)
untuk posisi, country_name di country_name_position:
mengajukan.write("nomor negara : \n".format(posisi + 1, nama_negara.teks))

Kodenya hampir sama dengan yang awal, namun saya telah menambahkan BeautifulSoup ke namespace kami dan saya telah mengubah logika dalam fungsi parse.

Mari kita lihat logikanya dengan cepat.

def parse(diri, respons):

Di sini kita telah mendefinisikan fungsi parse, dan memberinya parameter respons.

page_number = tanggapan.url.membagi('/')[-1]
file_name = "halaman.txt".format(nomor_halaman)
dengan open(file_name, 'w') sebagai file:

Ini melakukan hal yang sama seperti yang dibahas dalam kode awal, satu-satunya perbedaan adalah kita bekerja dengan file teks, bukan file html. Kami akan menyimpan data yang tergores dalam file teks, dan bukan seluruh konten web dalam html seperti yang dilakukan sebelumnya.

html_content = BeautifulSoup(tanggapan.tubuh, "lxml")

Apa yang telah kami lakukan di baris kode ini adalah mengirimkan tanggapan.tubuh sebagai argumen ke perpustakaan BeautifulSoup, dan menetapkan hasilnya ke html_konten variabel.

div_tags = html_content.temukan("div", "id": "hasil")

Mengambil konten html, kami menguraikannya di sini dengan mencari a div tag yang juga memiliki dan Indo atribut dengan hasil sebagai nilainya, maka kita bisa menyimpannya di a div_tags variabel.

country_tags = div_tags.temukan_semua("div")

Ingatlah bahwa negara-negara itu ada di div tag juga, sekarang kami hanya mendapatkan semua div tag dan menyimpannya sebagai daftar di country_tags variabel.

nama_negara_posisi = zip(rentang(len(tag_negara)), tag_negara)
 
untuk posisi, country_name di country_name_position:
mengajukan.write("nomor negara : \n".format(posisi + 1, nama_negara.teks))

Di sini, kami mengulangi posisi negara di antara semua tag negara, lalu kami menyimpan konten dalam file teks.

Jadi di file teks Anda, Anda akan memiliki sesuatu seperti:

negara nomor 1 :  Afghanistan
negara nomor 2 :  Kepulauan Aland
negara nomor 3 :  Albania

Kesimpulan

Scrapy tidak diragukan lagi salah satu perpustakaan paling kuat di luar sana, sangat cepat dan pada dasarnya mengunduh halaman web. Ini kemudian memberi Anda kebebasan untuk apa pun yang Anda inginkan dengan konten web.

Kami harus mencatat bahwa Scrapy dapat melakukan lebih dari yang telah kami periksa di sini. Anda dapat mengurai data dengan pemilih Scrapy CSS atau Xpath jika Anda mau. Anda dapat membaca dokumentasi jika Anda perlu melakukan sesuatu yang lebih kompleks.

Tutorial OpenTTD
OpenTTD adalah salah satu game simulasi bisnis paling populer di luar sana. Dalam game ini, Anda perlu membuat bisnis transportasi yang luar biasa. Na...
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...