将selenium集成到scrapy框架中
Posted 骑着赶路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将selenium集成到scrapy框架中相关的知识,希望对你有一定的参考价值。
一 首先想到的是将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框架中的主要内容,如果未能解决你的问题,请参考以下文章
使用scrapy-selenium, chrome-headless抓取动态网页