Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan Scrapy untuk membina program perangkak yang cekap

Cara menggunakan Scrapy untuk membina program perangkak yang cekap

WBOY
WBOYasal
2023-08-02 14:33:13677semak imbas

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.

  1. Struktur asas program perangkak

Program perangkak Scrapy terutamanya terdiri daripada komponen berikut:

  • Program perangkak: mentakrifkan cara merangkak halaman, menghuraikan data daripadanya dan mengikuti pautan.
  • Saluran paip projek: Bertanggungjawab untuk memproses data yang diekstrak daripada halaman oleh program perangkak dan melaksanakan pemprosesan seterusnya, seperti menyimpannya dalam pangkalan data atau mengeksportnya ke fail, dsb.
  • Perisian tengah muat turun: Bertanggungjawab untuk memproses permintaan penghantaran dan mendapatkan kandungan halaman Ia boleh melaksanakan operasi seperti tetapan Ejen Pengguna dan penukaran IP proksi.
  • Penjadual: Bertanggungjawab mengurus semua permintaan untuk diambil dan menjadualkannya mengikut strategi tertentu.
  • Pemuat turun: Bertanggungjawab memuat turun kandungan halaman yang diminta dan mengembalikannya ke program perangkak.
  1. Menulis program perangkak

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.

  1. Mengkonfigurasi saluran paip projek

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.

    Di atas adalah proses asas dan kod sampel untuk menggunakan Scrapy untuk membina program perangkak yang cekap. Sudah tentu, Scrapy juga menawarkan banyak ciri dan pilihan lain yang boleh dilaraskan dan dilanjutkan mengikut keperluan khusus. Saya harap artikel ini dapat membantu pembaca lebih memahami dan menggunakan Scrapy serta membina program perangkak yang cekap.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn