將Selenium 與Scrapy 整合以進行動態頁面抓取
當嘗試使用Scrapy 從動態網頁抓取資料時,標準抓取過程可能會達不到要求。當分頁依賴非同步載入時,例如按一下不修改 URL 的「下一步」按鈕,通常會出現這種情況。為了克服這項挑戰,將 Selenium 合併到您的 Scrapy 蜘蛛中可能是一個有效的解決方案。
將 Selenium 放入您的蜘蛛中
Selenium 在您的 Scrapy 蜘蛛中的最佳放置取決於關於具體的刮削要求。然而,幾種常見的方法包括:
將 Selenium 與 Scrapy 結合使用的範例
例如,假設您想要在 eBay 上抓取分頁結果。以下程式碼片段示範如何將Selenium 與Scrapy 整合:
import scrapy from selenium import webdriver class ProductSpider(scrapy.Spider): name = "product_spider" allowed_domains = ['ebay.com'] start_urls = ['https://www.ebay.com/sch/i.html?_odkw=books&_osacat=0&_trksid=p2045573.m570.l1313.TR0.TRC0.Xpython&_nkw=python&_sacat=0&_from=R40'] def __init__(self): self.driver = webdriver.Firefox() def parse(self, response): self.driver.get(response.url) while True: next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a') try: next.click() # Get and process the data here except: break self.driver.close()
替代方案:使用ScrapyJS 中間件
在某些情況下,使用ScrapyJS 中間件可能足以處理網頁的動態部分,不需要Selenium。該中間件可讓您在 scrapy 框架內執行自訂 JavaScript。
請參閱提供的鏈接,了解將 Selenium 與 Scrapy 整合的其他範例和用例。
以上是如何整合Selenium和Scrapy來有效率地抓取動態網頁?的詳細內容。更多資訊請關注PHP中文網其他相關文章!