一 首先想到的是将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‘)
原文地址:https://www.cnblogs.com/654321cc/p/8977925.html
时间: 2024-10-07 23:16:06