zoukankan      html  css  js  c++  java
  • 将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')
  • 相关阅读:
    conn
    快速指数算法+Python代码
    扩展欧几里得算法+Python代码
    最速下降法+Matlab代码
    第二类生日攻击算法
    遗传算法+Python代码
    模糊聚类+Matlab代码
    数据库检索
    Spring Data Jpa依赖和配置
    上传Typora到博客园(解决图片缩放问题)
  • 原文地址:https://www.cnblogs.com/654321cc/p/8977925.html
Copyright © 2011-2022 走看看