Cara menggunakan Scrapy untuk membina program perangkak yang cekap
Dengan kemunculan era maklumat, jumlah data di Internet terus meningkat, dan permintaan untuk mendapatkan jumlah data yang besar juga semakin meningkat. Dan crawler telah menjadi salah satu penyelesaian terbaik untuk keperluan ini. Sebagai rangka kerja perangkak Python yang sangat baik, Scrapy adalah cekap, stabil dan mudah digunakan, serta digunakan secara meluas dalam pelbagai bidang. Artikel ini akan memperkenalkan cara menggunakan Scrapy untuk membina program perangkak yang cekap dan memberikan contoh kod.
Program perangkak Scrapy terutamanya terdiri daripada komponen berikut:
Dalam Scrapy, kami perlu mencipta projek perangkak baharu untuk menulis program perangkak kami. Jalankan arahan berikut dalam baris arahan:
scrapy startproject myspider
Ini akan mencipta folder projek bernama "myspider" dengan beberapa fail dan folder lalai. Kita boleh masuk ke dalam folder ini dan mencipta perangkak baharu:
cd myspider scrapy genspider example example.com
Ini akan mencipta perangkak bernama "contoh" untuk merangkak data daripada tapak web "example.com". Kami boleh menulis logik perangkak tertentu dalam fail "example_spider.py" yang dihasilkan.
Di bawah ialah contoh mudah untuk mengikis tajuk berita dan pautan pada tapak web.
import scrapy class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] start_urls = ['http://www.example.com/news'] def parse(self, response): for news in response.xpath('//div[@class="news-item"]'): yield { 'title': news.xpath('.//h2/text()').get(), 'link': news.xpath('.//a/@href').get(), } next_page = response.xpath('//a[@class="next-page"]/@href').get() if next_page: yield response.follow(next_page, self.parse)
Dalam kod di atas, kami mentakrifkan kelas perangkak bernama "ExampleSpider", yang mengandungi tiga atribut: nama mewakili nama perangkak, allowed_domains mewakili nama domain yang dibenarkan untuk merangkak tapak web dan start_urls mewakili URL permulaan . Kemudian kami menulis semula kaedah penghuraian, yang menghuraikan kandungan halaman web, mengekstrak tajuk berita dan pautan serta mengembalikan hasil menggunakan hasil.
Dalam Scrapy, kami boleh menyalurkan data yang dirangkak melalui saluran paip projek. Data boleh disimpan dalam pangkalan data, ditulis ke fail, atau sebaliknya diproses kemudian.
Buka fail "settings.py" dalam folder projek, cari item konfigurasi ITEM_PIPELINES di dalamnya dan nyahkomennya. Kemudian tambahkan kod berikut:
ITEM_PIPELINES = { 'myspider.pipelines.MyPipeline': 300, }
Ini akan membolehkan kelas saluran paip tersuai "my spider.pipelines.MyPipeline" dan menentukan keutamaan (semakin rendah nombor, semakin tinggi keutamaan).
Seterusnya, kita perlu mencipta kelas saluran paip untuk memproses data. Cipta fail yang dipanggil "pipelines.py" dalam folder projek dan tambahkan kod berikut:
import json class MyPipeline: def open_spider(self, spider): self.file = open('news.json', 'w') def close_spider(self, spider): self.file.close() def process_item(self, item, spider): line = json.dumps(dict(item)) + " " self.file.write(line) return item
Dalam contoh ini, kami mentakrifkan kelas saluran paip yang dipanggil "MyPipeline" dengan tiga kaedah: open_spider , close_spider dan process_item. Dalam kaedah open_spider, kami membuka fail untuk menyimpan data. Dalam kaedah close_spider, kami menutup fail. Dalam kaedah process_item, kami menukar data ke dalam format JSON dan menulisnya ke fail. . merangkak Dapatkan data. Data yang dirangkak akan diproses seperti yang kami takrifkan dalam kelas saluran paip.
Atas ialah kandungan terperinci Cara menggunakan Scrapy untuk membina program perangkak yang cekap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!