将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框架中的主要内容,如果未能解决你的问题,请参考以下文章

将 Selenium 与 Scrapy 集成

使用scrapy-selenium, chrome-headless抓取动态网页

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

scrapy 集成 selenium

Scrapy框架--中间件及Selenium应用

爬虫(十六):Scrapy框架 Spider MiddlewareItem Pipeline对接Selenium