將Selenium 與Scrapy 整合以實現動態頁面
當抓取具有動態內容的複雜網站時,Selenium(一個Web 自動化框架)可以與Scrapy,一個網頁抓取框架,用於克服挑戰。
整合將 Selenium 整合到 Scrapy Spider
要將 Selenium 整合到 Scrapy Spider 中,請在 Spider 的 __init__ 方法中初始化 Selenium WebDriver。
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()
接下來,導覽至解析中的 URL方法並利用 Selenium 方法與頁面互動。
def parse(self, response): self.driver.get(response.url) next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a') next.click()
透過利用透過此方法,您可以模擬使用者互動、導航動態頁面並提取所需的資料。
將 Selenium 與 Scrapy 一起使用的替代方案
在某些情況下,使用 ScrapyJS中介軟體可能足以處理頁面的動態部分,而無需依賴 Selenium。例如,請參閱以下範例:
# 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())
這種方法採用 JavaScript 渲染,使用 ScrapyJS 來取得所需的數據,而不使用 Selenium。
以上是Selenium如何與Scrapy整合來抓取動態頁面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!