Penjelajahan seni bina asas Scrapy dan analisis kod sumber
Scrapy ialah rangka kerja perangkak web yang cekap berdasarkan Python Ia boleh mengekstrak data dari halaman web dengan cepat dan menyokong format storan dan eksport yang pelbagai pilihan popular di kalangan ramai Rangka kerja pilihan untuk peminat perangkak dan pembangun. Scrapy menggunakan model I/O tak segerak dan mekanisme perisian tengah dalam pelaksanaan asasnya, menjadikannya lebih cekap dan lebih berskala. Dalam artikel ini, kami akan meneroka pelaksanaan Scrapy daripada kedua-dua seni bina asas dan analisis kod sumber.
1. Seni bina asas Scrapy
Seni bina asas Scrapy terbahagi terutamanya kepada Enjin, Penjadual, Pemuat Turun, Labah-labah dan Talian Paip ) dan lima modul lain. Mereka melaksanakan tugas mereka sendiri dalam Scrapy dan bekerjasama untuk menjadikan keseluruhan proses merangkak lancar dan cekap.
Enjin Scrapy, sebagai teras keseluruhan rangka kerja perangkak, bertanggungjawab untuk menyelaraskan interaksi antara pelbagai modul dan acara pemprosesan serta Isyarat. Apabila enjin menerima isyarat mula perangkak, ia akan memperoleh objek Permintaan untuk dirangkak dalam penjadual, dan kemudian menghantar objek kepada pemuat turun untuk dimuat turun Selepas muat turun selesai, pemuat turun akan menghantar objek Respons yang dikembalikan kepada enjin . Enjin Objek Respons pertama akan diserahkan kepada Spider untuk dianalisis, dan objek Permintaan baharu akan dihasilkan berdasarkan hasil yang dikembalikan oleh Spider, dan kemudian objek Permintaan baharu akan dihantar kepada penjadual. Proses ini akan dilaksanakan dalam gelung sehingga baris gilir penjadual kosong dan perangkak tidak akan tamat.
2. Penjadual (Penjadual)
Penjadual digunakan untuk menyimpan dan mengurus semua objek Permintaan yang menunggu untuk dirangkak, dan bertanggungjawab untuk mengatur susunan permintaan mereka. Ia akan menyahgandakan objek Permintaan dan mengalih keluar permintaan keutamaan yang lebih rendah. Apabila enjin perlu mendapatkan objek Permintaan seterusnya untuk dirangkak, ia akan memanggil kaedah penjadual untuk mendapatkannya. Apabila objek Permintaan dimuat turun, pemuat turun akan menyerahkan objek Respons yang dikembalikan dan objek Permintaan yang sepadan kepada penjadual, dan penjadual akan menyimpannya dalam baris gilir permintaan.
3. Pemuat turun (Pemuat turun)
Pemuat turun digunakan terutamanya untuk menukar objek Permintaan yang diluluskan oleh enjin kepada objek Respons dan mengembalikannya kepada enjin. Pemuat turun akan mendapatkan kandungan halaman web yang sepadan daripada alamat URL yang ditentukan dengan menghantar permintaan HTTP atau HTTPS. Pemuat turun juga menyediakan beberapa perisian tengah muat turun, dan anda boleh menambah beberapa pemprosesan tersuai semasa proses muat turun, seperti proksi, pengenalan UA, pemprosesan kuki, dsb.
4. Labah-labah
Modul perangkak ialah logik rangkak sebenar Ia bertanggungjawab terutamanya untuk menghuraikan kandungan halaman web yang dimuat turun, merangkum hasil yang dihuraikan ke dalam objek Item, dan kemudian mengembalikan objek Item. ke enjin. Modul perangkak biasanya memerlukan menulis kelas perangkak tersuai dan menulis semula beberapa kaedah untuk melaksanakan penghuraian halaman, enkapsulasi objek Item dan penjanaan objek Permintaan.
5. Talian Paip
Modul saluran paip digunakan untuk melaksanakan satu siri pemprosesan pada objek Item yang dikembalikan oleh Spider, seperti pembersihan data, penyahduplikasian dan penyimpanan dalam pangkalan data atau fail, dsb. Dalam Scrapy, anda boleh menulis berbilang kelas saluran paip dan membentuk rantai saluran paip mengikut keutamaan Apabila Spider mengembalikan objek Item, saluran paip ini akan diproses mengikut urutan.
2. Analisis kod sumber Scrapy
Kelas spider ialah kelas paling teras dalam Scrapy, semuanya adalah kelas perangkak tersuai. kelas mengandungi kaedah pelaksanaan utama proses merangkak.
Pertama, kita perlu mentakrifkan beberapa atribut dalam kelas perangkak kita, seperti nama, domain_yang dibenarkan, start_urls, dsb. Atribut ini digunakan untuk menentukan nama perangkak, nama domain yang dibenarkan untuk dirangkak dan alamat URL tempat merangkak bermula.
Dengan mengatasi kaedah start_requests(), kami boleh menjana kumpulan pertama permintaan dan menyerahkannya kepada enjin untuk dirangkak.
Seterusnya, kita perlu mentakrifkan kaedah parse(), yang digunakan terutamanya untuk menghuraikan kandungan halaman web yang dimuat turun, termasuk mengekstrak data, menjana objek Permintaan baharu, dsb. Kaedah parse() akan dipanggil oleh enjin Dalam kaedah ini, halaman web akan dihuraikan langkah demi langkah, dan akhirnya objek Item atau objek Permintaan baharu akan dikembalikan.
Dalam Scrapy, kelas Item digunakan untuk merangkum data yang diekstrak daripada halaman web Ia sebenarnya objek kamus. Pelbagai jenis medan data boleh disediakan dalam objek Item, dan logik pemprosesan data mudah boleh dilaksanakan dalam perangkak, seperti pembersihan data, pemetaan data, dsb. Objek Item akhirnya akan dikembalikan ke enjin dan diproses oleh Pipeline secara bergilir-gilir.
Modul Tetapan digunakan untuk menetapkan maklumat konfigurasi Scrapy, termasuk nama perangkak, kelewatan permintaan, bilangan konkurensi, tamat masa muat turun, dsb. Anda boleh menukar cara Scrapy berjalan dengan mengubah suai pilihan dalam modul Tetapan. Dalam kod perangkak, modul Tetapan boleh diakses melalui atribut tetapan dalam kelas perangkak. Semua pilihan dalam modul Tetapan disimpan dalam bentuk kamus Kami boleh mengubah suai nilai pilihan secara langsung dalam modul Tetapan dalam kod, atau membaca maklumat konfigurasi daripada fail.
Muat turun middleware dalam Scrapy boleh memintas permintaan yang dimulakan oleh pemuat turun dan respons yang diterima, dan boleh mengubah suai permintaan atau respons dan menambah proksi , UA logo, Kuki, dsb. Scrapy menyokong berbilang middleware, yang boleh dilaksanakan secara berurutan mengikut keutamaan. Permintaan dan proses Middleware dengan mengatasi kaedah process_request(), process_response() atau process_exception().
Spider middleware digunakan untuk memintas input dan output Spider Ia termasuk Downloader Middleware yang memintas permintaan dan Spider yang memintas respons. Middleware mempunyai dua bahagian. Permintaan dan proses Middleware dengan mengatasi kaedah process_spider_input() dan process_spider_output().
Rangka kerja Scrapy sangat berkuasa dan boleh disesuaikan dengan pelbagai tapak web Ia menyediakan fungsi yang kaya dan antara muka lanjutan, dan sangat sesuai untuk merangkak data web berskala besar, cekap dan stabil. Tetapi pada masa yang sama, Scrapy juga mempunyai beberapa kelemahannya sendiri, seperti sokongan yang tidak mencukupi untuk merangkak tapak web yang diberikan JavaScript, sokongan yang tidak mencukupi untuk permintaan masa nyata AJAX, dll. Ini perlu digabungkan dengan alatan lain untuk berfungsi bersama.
Atas ialah kandungan terperinci Penjelajahan seni bina asas dan analisis kod sumber yang tidak sempurna. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!