Scrapy ialah rangka kerja perangkak Python yang sangat berguna yang boleh membantu kami mendapatkan data dengan mudah daripada tapak web yang berbeza. Pada masa yang sama, semakin ramai pengguna Scrapy menggunakannya untuk merangkak data Oleh itu, dalam proses menggunakan Scrapy, kami perlu mempertimbangkan cara mengoptimumkan perangkak kami supaya kami boleh merangkak data yang diperlukan dengan lebih cekap. Artikel ini akan berkongsi beberapa petua untuk pengoptimuman perangkak dalam Scrapy.
Apabila kami menggunakan Scrapy untuk merangkak data halaman web, kami mungkin menghadapi permintaan pendua. Jika tidak dikendalikan, situasi seperti ini membazirkan sumber dan masa rangkaian. Oleh itu, apabila menggunakan Scrapy, kita perlu memberi perhatian untuk mengelakkan permintaan pendua.
Dalam Scrapy, kita boleh mengelakkan permintaan pendua dengan menetapkan parameter DUPEFILTER_CLASS. Kita boleh menggunakan Redis atau modul penyahduplikasi memori untuk mengelakkan permintaan berulang. Tetapan adalah seperti berikut:
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
Apabila merangkak data halaman web, kami mungkin menghadapi mekanisme anti-merangkak tapak web, dan mungkin disekat oleh tapak web disebabkan permintaan yang terlalu kerap. Oleh itu, kita perlu mempertimbangkan untuk meningkatkan kelewatan supaya kekerapan permintaan perangkak menjadi lebih stabil.
Dalam Scrapy, kami boleh meningkatkan kelewatan permintaan dengan menetapkan parameter DOWNLOAD_DELAY.
DOWNLOAD_DELAY=3 # 设置下载延迟为3秒
Untuk mengelakkan daripada dikenali sebagai perangkak oleh tapak web, kami perlu mensimulasikan Ejen Pengguna penyemak imbas. Dalam Scrapy, kita boleh mencapai fungsi ini dengan menetapkan parameter USER_AGENT dalam fail settings.py. Berikut ialah contoh:
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
Dalam Scrapy, secara lalai, setiap permintaan akan dicuba semula apabila bilangan percubaan semula maksimum dicapai operasi deduplikasi. Oleh itu, jika anda mempunyai banyak permintaan, operasi ini akan menyebabkan banyak operasi IO rangkaian, menghasilkan program yang lebih perlahan. Untuk mengoptimumkan keadaan ini, kami boleh menyimpan nilai cincang URL data permintaan dan kaedah yang diminta dalam ingatan supaya kami dapat menentukan dengan cepat sama ada URL telah diminta. Ini boleh dicapai menggunakan kod berikut:
from scrapy.utils.request import request_fingerprint seen = set() fp = request_fingerprint(request) if fp in seen: return seen.add(fp)
Dalam Scrapy, kita boleh menggunakan pemilih XPath atau CSS untuk mencari elemen. XPath boleh melakukan lebih daripada pemilih CSS, tetapi pemilih CSS lebih pantas daripada XPath. Oleh itu, kami harus menggunakan pemilih CSS apabila mungkin untuk mengoptimumkan perangkak kami.
Scrapy menggunakan menyekat operasi I/O secara lalai, tetapi operasi I/O tak segerak boleh memberikan prestasi yang lebih baik. Kita boleh menggunakan operasi I/O tak segerak bagi pakej Twisted untuk menukar Scrapy menjadi rangka kerja tak segerak.
Apabila merangkak data, kami boleh menggunakan berbilang benang untuk mempercepatkan perangkak kami. Dalam Scrapy, kita boleh menetapkan bilangan utas dengan menetapkan parameter CONCURRENT_REQUESTS_PER_IP. Berikut ialah contoh kod:
CONCURRENT_REQUESTS_PER_IP=16
Ringkasan
Scrapy ialah rangka kerja perangkak Python yang sangat baik, tetapi semasa penggunaan kita perlu memberi perhatian untuk mengoptimumkan perangkak kita untuk merangkak apa yang kita perlukan dengan lebih cekap data. Artikel ini berkongsi beberapa petua untuk pengoptimuman perangkak dalam Scrapy, saya harap ia akan membantu anda.
Atas ialah kandungan terperinci Perkongsian petua pengoptimuman perangkak dalam Scrapy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!