Rumah >pembangunan bahagian belakang >Tutorial Python >Kaedah pelaksanaan pemuatan asynchronous Scrapy berdasarkan Ajax
Scrapy ialah rangka kerja perangkak Python sumber terbuka yang boleh mendapatkan data daripada tapak web dengan cepat dan cekap. Walau bagaimanapun, banyak tapak web menggunakan teknologi pemuatan tak segerak Ajax, menjadikannya mustahil untuk Scrapy mendapatkan data secara langsung. Artikel ini akan memperkenalkan kaedah pelaksanaan Scrapy berdasarkan pemuatan tak segerak Ajax.
1. Prinsip pemuatan tak segerak Ajax
Pemuatan tak segerak Ajax: Dalam kaedah pemuatan halaman tradisional, selepas pelayar menghantar permintaan kepada pelayan, ia mesti menunggu pelayan mengembalikan respons dan muatkan seluruh halaman Pergi ke langkah seterusnya. Selepas menggunakan teknologi Ajax, penyemak imbas boleh mendapatkan data daripada pelayan secara tidak segerak dan mengemas kini kandungan halaman secara dinamik tanpa menyegarkan halaman, sekali gus menjimatkan lebar jalur rangkaian dan meningkatkan pengalaman pengguna.
Prinsip asas teknologi Ajax adalah untuk melaksanakan komunikasi tak segerak melalui objek XMLHttpRequest. Pelanggan (penyemak imbas) menghantar permintaan kepada pelayan dan mengekalkan halaman daripada menyegarkan sementara menunggu respons Kemudian, selepas pelayan membalas dan mengembalikan data, ia mengemas kini halaman secara dinamik melalui JavaScript untuk mencapai pemuatan tak segerak.
2. Scrapy berdasarkan kaedah pelaksanaan pemuatan tak segerak Ajax
1 Analisis permintaan Ajax halaman
Sebelum menggunakan Scrapy untuk merangkak, kami perlu menganalisis permintaan Ajax. daripada laman web sasaran. Anda boleh menggunakan alat pembangun penyemak imbas di bawah tab Rangkaian untuk melihat dan menganalisis URL, parameter permintaan dan format data kembali permintaan Ajax.
2. Gunakan modul Scrapy's Request untuk menghantar permintaan Ajax
Kita boleh menggunakan modul Scrapy's Request untuk menghantar permintaan Ajax, kodnya adalah seperti berikut:
import scrapy class AjaxSpider(scrapy.Spider): name = "ajax_spider" start_urls = ["http://www.example.com"] def start_requests(self): for url in self.start_urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): ajax_url = "http://www.example.com/ajax" ajax_headers = {'x-requested-with': 'XMLHttpRequest'} ajax_data = {'param': 'value'} yield scrapy.FormRequest(url=ajax_url, headers=ajax_headers, formdata=ajax_data, callback=self.parse_ajax) def parse_ajax(self, response): # 解析Ajax返回的数据 pass
Dalam kod ini, kami Mula-mula, gunakan modul Permintaan Scrapy untuk menghantar permintaan asal melalui kaedah start_requests(), menghuraikan kandungan respons dalam kaedah parse() dan memulakan permintaan Ajax. Dalam kaedah parse_ajax(), parse data yang dikembalikan oleh permintaan Ajax.
3. Memproses data yang dikembalikan oleh Ajax
Selepas kami memperoleh data pemulangan daripada permintaan Ajax, kami boleh menghuraikan dan memprosesnya. Biasanya, data yang dikembalikan oleh Ajax adalah dalam format JSON, yang boleh dihuraikan menggunakan modul json Python. Contohnya:
import json def parse_ajax(self, response): json_data = json.loads(response.body) for item in json_data['items']: # 对数据进行处理 pass
4 Gunakan Scrapy’s Item Pipeline untuk kegigihan data
Langkah terakhir ialah menggunakan Scrapy’s Item Pipeline untuk kegigihan data. Kita boleh menyimpan data yang dihuraikan dalam pangkalan data atau menyimpannya ke fail setempat, contohnya:
import json class AjaxPipeline(object): def open_spider(self, spider): self.file = open('data.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
Ringkasan:
Artikel ini memperkenalkan kaedah Scrapy berdasarkan pemuatan tak segerak Ajax. Mula-mula menganalisis permintaan Ajax halaman, gunakan modul Permintaan Scrapy untuk menghantar permintaan, menghuraikan dan memproses data yang dikembalikan oleh Ajax, dan akhirnya menggunakan Talian Item Scrapy untuk kegigihan data. Melalui pengenalan artikel ini, anda boleh menangani dengan lebih baik tapak web merangkak yang perlu menggunakan Ajax untuk memuatkan secara tidak segerak.
Atas ialah kandungan terperinci Kaedah pelaksanaan pemuatan asynchronous Scrapy berdasarkan Ajax. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!