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')
  • 相关阅读:
    随便练习的进制转换
    回顾快速排序
    常用c++函数
    POJ 1163 The Triangle
    HDU 1155 Bungee Jumping
    ZOJ 3861 Valid Pattern Lock
    POJ 1273 Drainage Ditches
    Hrbust 2240 土豪的时代
    POJ 3468 A Simple Problem with Integers
    POJ 1061 青蛙的约会
  • 原文地址:https://www.cnblogs.com/654321cc/p/8977925.html
Copyright © 2011-2022 走看看