Mengintegrasikan Selenium dengan Scrapy untuk Halaman Dinamik
Apabila mengikis tapak web yang kompleks dengan kandungan dinamik, Selenium, rangka kerja automasi web, boleh disepadukan dengan Scrapy, rangka kerja mengikis web, untuk mengatasi cabaran.
Mengintegrasikan Selenium ke dalam Labah-labah Scrapy
Untuk menyepadukan Selenium ke dalam labah-labah Scrapy anda, mulakan Selenium WebDriver dalam labah-labah kaedah __init__.
import scrapy from selenium import webdriver class ProductSpider(scrapy.Spider): name = "product_spider" allowed_domains = ['example.com'] start_urls = ['http://example.com/shanghai'] def __init__(self): self.driver = webdriver.Firefox()
Seterusnya, navigasi ke URL dalam kaedah parse dan gunakan kaedah Selenium untuk berinteraksi dengan halaman.
def parse(self, response): self.driver.get(response.url) next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a') next.click()
Dengan menggunakan pendekatan ini, anda boleh mensimulasikan pengguna interaksi, navigasi halaman dinamik dan ekstrak data yang dikehendaki.
Alternatif kepada Menggunakan Selenium dengan Scrapy
Dalam senario tertentu, menggunakan perisian tengah ScrapyJS mungkin mencukupi untuk mengendalikan bahagian dinamik halaman tanpa bergantung pada Selenium. Sebagai contoh, lihat contoh berikut:
# scrapy.cfg DOWNLOADER_MIDDLEWARES = { 'scrapyjs.SplashMiddleware': 580, }
# my_spider.py class MySpider(scrapy.Spider): name = 'my_spider' start_urls = ['http://example.com/dynamic'] def parse(self, response): script = 'function() { return document.querySelectorAll("div.product-info").length; }' return Request(url=response.url, callback=self.parse_product, meta={'render_javascript': True, 'javascript': script}) def parse_product(self, response): product_count = int(response.xpath('//*[@data-scrapy-meta]/text()').extract_first())
Pendekatan ini menggunakan pemaparan JavaScript menggunakan ScrapyJS untuk mendapatkan data yang dikehendaki tanpa menggunakan Selenium.
Atas ialah kandungan terperinci Bagaimanakah Selenium boleh Disepadukan dengan Scrapy to Scrape Dynamic Pages?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!