將selenium集成到scrapy框架中
阿新 • • 發佈:2018-05-02
有一個 turn object get signals con span ren super()
一 首先想到的是將selenium 寫在下載中間件的process_request中。如以下代碼。
middleware.py
from selenium import webdriver from scrapy.http import HtmlResponse class TestMiddleware(object): def __init__(self): self.driver = webdriver.Chrome() super().__init__() def process_request(self, request, spider): self.driver.get(‘xxx‘) return HtmlResponse(url=self.driver.current_url,body=self.driver.page_source,encoding=‘utf-8‘)
但這有一個問題是,打開的selenium並不能關閉
二 可以考慮將driver放在spider中。
好處有以下幾點:
1 並不是每個spider 都是需要用selenium進行下載的
2 多個spider運行,打開selenium相當於開啟了多進程。
類似這樣
目前官方推薦獎信號綁定到crawler中,及類方法from_crawler。
spider.py
class YunqiSpider(scrapy.Spider): name = ‘yunqi‘ def __init__(self): self.driver = webdriver.Chrome() super().__init__() dispatcher.connect(self.close_spider,signal=signals.spider_closed)
middleware.py
from scrapy.http import HtmlResponseclass TestMiddleware(object): def process_request(self, request, spider): return HtmlResponse(url=spider.driver.current_url,body=spider.driver.page_source,encoding=‘utf-8‘)
將selenium集成到scrapy框架中