码迷,mamicode.com
首页 > 其他好文 > 详细

将selenium集成到scrapy框架中

时间:2018-05-02 02:24:23      阅读:345      评论:0      收藏:0      [点我收藏+]

标签:def   proc   pat   ESS   request   object   sele   下载   一个   

一 首先想到的是将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框架中

标签:def   proc   pat   ESS   request   object   sele   下载   一个   

原文地址:https://www.cnblogs.com/654321cc/p/8977925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!