Menggunakan Selenium dan PhantomJS dalam perangkak Scrapy
Scrapy ialah rangka kerja perangkak web yang sangat baik di bawah Python dan telah digunakan secara meluas dalam pengumpulan dan pemprosesan data dalam pelbagai bidang. Dalam pelaksanaan perangkak, kadangkala perlu untuk mensimulasikan operasi penyemak imbas untuk mendapatkan kandungan yang dibentangkan oleh tapak web tertentu Dalam kes ini, Selenium dan PhantomJS diperlukan.
Selenium mensimulasikan operasi manusia pada penyemak imbas, membolehkan kami mengautomasikan ujian aplikasi web dan mensimulasikan pengguna biasa yang melawati tapak web. PhantomJS ialah penyemak imbas tanpa kepala berdasarkan WebKit Ia boleh menggunakan bahasa skrip untuk mengawal tingkah laku penyemak imbas dan menyokong pelbagai fungsi yang diperlukan untuk pembangunan web, termasuk tangkapan skrin halaman, automasi halaman, pemantauan rangkaian, dll.
Di bawah ini kami memperkenalkan secara terperinci cara menggabungkan Selenium dan PhantomJS dalam Scrapy untuk merealisasikan automasi penyemak imbas.
Mula-mula, perkenalkan modul yang diperlukan pada permulaan fail perangkak:
from selenium import webdriver from scrapy.http import HtmlResponse from scrapy.utils.project import get_project_settings
Kemudian dalam kaedah start_requests
Spider, kami mencipta objek WebDriver melalui PhantomJS dan menetapkan beberapa pilihan penyemak imbas:
class MySpider(Spider): name = 'example.com' start_urls = ['http://www.example.com'] def __init__(self): settings = get_project_settings() self.driver = webdriver.PhantomJS(executable_path=settings.get('PHANTOMJS_PATH')) super(MySpider, self).__init__() def start_requests(self): self.driver.get(self.start_urls[0]) # 进行输入表单、点击等浏览器操作 # ... content = self.driver.page_source.encode('utf-8') response = HtmlResponse(url=self.driver.current_url, body=content) yield response
Di sini kami menetapkan laluan fail boleh laku PhantomJS dan mengakses halaman permulaan melalui kaedah self.driver.get
. Seterusnya, kami boleh melakukan operasi automasi penyemak imbas pada halaman ini, seperti memasukkan borang, mengklik butang, dsb., untuk mensimulasikan operasi pengguna. Jika anda ingin mendapatkan kandungan halaman selepas operasi, anda boleh mendapatkan kod sumber HTML melalui self.driver.page_source
, kemudian gunakan Scrapy's HtmlResponse
untuk menjana objek Respons dan mengembalikannya kepada pemanggil kaedah.
Perlu diingat bahawa selepas menggunakan objek WebDriver, sebaiknya tutup proses penyemak imbas melalui
self.driver.quit()
untuk melepaskan sumber sistem.
Sudah tentu, apabila menggunakan Selenium dan PhantomJS, anda perlu memasang pakej perisian yang sepadan dan mengkonfigurasi pembolehubah persekitaran yang berkaitan. Semasa konfigurasi, anda boleh menggunakan kaedah get_project_settings
untuk mendapatkan konfigurasi lalai Scrapy, dan kemudian mengubah suai item konfigurasi yang sepadan.
Pada ketika ini, kami boleh menggunakan Selenium dan PhantomJS dalam Scrapy untuk mengautomasikan operasi penyemak imbas, dengan itu mencapai fungsi rangkak data tapak web yang lebih kompleks dan tepat. Mampu menggunakan kaedah ini secara fleksibel adalah kemahiran penting untuk jurutera perangkak yang cekap.
Atas ialah kandungan terperinci Menggunakan Selenium dan PhantomJS dalam perangkak Scrapy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!