Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua dan pertimbangan untuk menyahpepijat rangka kerja Scrapy

Petua dan pertimbangan untuk menyahpepijat rangka kerja Scrapy

PHPz
PHPzasal
2023-06-22 08:43:571885semak imbas

Scrapy ialah rangka kerja Python yang digunakan secara meluas dalam projek perangkak web. Rangka kerja Scrapy mempunyai kelebihan kecekapan tinggi, enkapsulasi tinggi, dan pengembangan mudah, jadi ia digunakan secara meluas dalam aplikasi perangkak dalam pelbagai industri. Apabila membangun menggunakan rangka kerja Scrapy, untuk memastikan kestabilan dan ketepatan projek, kita mesti nyahpepijat kod. Walau bagaimanapun, rangka kerja Scrapy mempunyai banyak perbezaan dalam penyahpepijatan daripada rangka kerja Python yang lain, memerlukan kami menguasai beberapa teknik dan langkah berjaga-jaga khas. Artikel ini akan menumpukan pada kemahiran nyahpepijat dan langkah berjaga-jaga rangka kerja Scrapy untuk membantu pembaca menyahpepijat kod dengan lebih cekap dan tepat apabila menggunakan rangka kerja Scrapy.

1 Gunakan penyahpepijat

Pertama sekali, kita boleh menggunakan penyahpepijat pdb (Python DeBugger) yang digunakan secara meluas dalam komuniti Python untuk menyahpepijat rangka kerja Scrapy dengan menetapkan titik putus, memantau pembolehubah, dsb. . Operasi ini mudah dan langsung Anda perlu menambah pernyataan import pdb pada baris arahan atau skrip Python, dan kemudian tambah pdb.set_trace() pada titik di mana kod itu mahu berhenti. Selepas fungsi dilaksanakan, atur cara akan berhenti di lokasi ini dan menunggu pengguna memasukkan arahan untuk nyahpepijat. Untuk arahan khusus penyahpepijat, sila rujuk dokumentasi penyahpepijat Python pdb.

2. Ubah suai tahap LOG

Kami boleh mengubah suai tahap log rangka kerja Scrapy kepada tahap DEBUG, supaya lebih banyak maklumat boleh dikeluarkan kepada konsol. Kaedahnya ialah untuk menetapkan LOG_LEVEL = 'DEBUG' dalam fail settings.py. Dengan cara ini, Scrapy akan mengeluarkan maklumat penyahpepijatan ke konsol. Walau bagaimanapun, kerana terlalu banyak maklumat dikeluarkan, terlalu banyak maklumat penyahpepijatan akan mengeruhkan konsol Oleh itu, adalah disyorkan untuk mengehadkan tahap log keluaran pada baris arahan sementara menunggu maklumat terperinci dikeluarkan. Sebagai contoh, laksanakan pernyataan berikut pada baris arahan:

scrapy crawl myspider -s LOG_LEVEL=DEBUG

3 Perhatikan situasi Permintaan

Dalam rangka kerja Scrapy, Permintaan ialah pautan antara rangka kerja dan Unit asas komunikasi antara tapak web, jadi menyahpepijat Permintaan adalah sangat penting. Kita boleh menggunakan fungsi start_requests() dalam Spider untuk menyemak sama ada setiap objek Request memenuhi jangkaan kita. Fungsi start_requests() digunakan untuk mentakrifkan objek Permintaan yang dihantar buat kali pertama, dan boleh menetapkan fungsi panggil balik, kuki, pengepala dan maklumat lain Permintaan melalui nilai pulangan. Kita boleh menetapkan titik putus dalam fungsi start_requests() untuk melihat situasi khusus setiap Permintaan. Pada masa yang sama, kami juga boleh menyimpan maklumat tambahan dalam Permintaan melalui sifat Request.meta untuk penyahpepijatan dan tujuan lain. Contohnya, dalam fungsi start_requests(), tetapkan Permintaan berikut:

hasil scrapy.Request(

url=url,
meta={'proxy': 'http://user:pass@ip:port'}
callback=self.parse

)

Dengan cara ini, kita boleh menghantar respons dalam fungsi parse. Atribut meta memperoleh maklumat meta Permintaan.

4. Gunakan Scrapy Shell untuk nyahpepijat

Scrapy menyediakan alat perintah Scrapy shell yang sangat berguna, yang boleh membantu kami dalam menyahpepijat kod dan memahami struktur halaman semasa proses pembangunan. Cangkang Scrapy membolehkan kami menggunakan rangka kerja Scrapy untuk mensimulasikan permintaan HTTP untuk menguji pemilih XPath dan CSS dengan cepat, dsb. dalam konsol Python. Menggunakan shell Scrapy adalah sangat mudah Anda hanya perlu memasukkan dalam baris arahan:

shell scrapy "http://www.example.com"

untuk memasuki shell Scrapy, yang disediakan dalam Scrapy Pemuat turun akan memuat turun URL yang ditentukan secara automatik dan menyimpan hasilnya dalam objek respons. Dengan cara ini, kita boleh mendapatkan nilai pulangan permintaan melalui atribut response.body, dan menggunakan kaedah xpath() dan css() untuk mendapatkan elemen yang sepadan, supaya dapat menyahpepijat peraturan rangkak kita dengan cepat.

5. Mengendalikan pengecualian

Akhir sekali, anda juga perlu memberi perhatian kepada kelakuan rangka kerja Scrapy semasa mengendalikan pengecualian. Apakah yang berlaku kepada rangka kerja Scrapy apabila pengecualian berlaku dalam program? Konfigurasi lalai rangka kerja Scrapy adalah untuk menghentikan program apabila sebarang pengecualian yang tidak dikendalikan diterima pada masa jalan. Untuk projek perangkak, ini tidak boleh diterima, kerana sentiasa terdapat banyak situasi istimewa di tapak web, seperti masalah tapak web, anomali data halaman, dsb., yang mungkin menyebabkan program ranap. Oleh itu, apabila kami menulis program perangkak, kami perlu menangkap semua kemungkinan pengecualian dan membangunkan pengendali yang sepadan.

Terdapat banyak cara untuk mengendalikan pengecualian, seperti menangkap pengecualian, menggunakan pernyataan cuba-kecuali, mencetak mesej ralat, dsb. Rangka kerja Scrapy sendiri juga menyediakan antara muka untuk mengendalikan pengecualian, seperti fungsi spider_idle(), closed(), serta muat turun middleware dan fungsi kitaran hayat middleware Spider. Apabila menggunakan Scrapy, kita perlu memahami peranan antara muka ini dan menggunakannya secara munasabah untuk mengendalikan kemungkinan pengecualian untuk memastikan kestabilan program perangkak.

Kesimpulan:

Dengan petua dan langkah berjaga-jaga di atas, kami boleh nyahpepijat dan menguji dengan lebih cekap dan tepat dalam pembangunan Scrapy, dan menemui kemungkinan ralat dan pengecualian dalam kod program crawler. Apabila menggunakan rangka kerja Scrapy, kita perlu mempunyai pemahaman yang mendalam tentang kitaran hayat rangka kerja Scrapy, perisian tengah, penjadual, perangkak dan komponen teras lain, dan mengambil langkah yang sesuai dalam mengendalikan pengecualian, menetapkan log, dsb. Saya harap pembaca boleh mendapatkan sedikit inspirasi dan bantuan daripada artikel ini semasa membangunkan projek Scrapy dan lebih baik menggunakan rangka kerja Scrapy untuk pembangunan projek.

Atas ialah kandungan terperinci Petua dan pertimbangan untuk menyahpepijat rangka kerja Scrapy. 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