1. 程式人生 > >將selenium集成到scrapy框架中

將selenium集成到scrapy框架中

有一個 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 HtmlResponse
class 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框架中