将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‘)

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

时间: 2024-10-07 23:16:06

将selenium集成到scrapy框架中的相关文章

18、python网路爬虫之Scrapy框架中的CrawlSpider详解

CrawlSpider的引入: 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效) CrawlSpider的简介: CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能.其中最显著的功能就是"

Scrapy框架中的CrawlSpider

小思考:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效). 一.简介 CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能.其中最显著的功能就是”LinkExtractors链接提取器“.Spider是所有爬虫的基

scrapy专题(一):scrapy框架中各组件的工作流程

Scrapy 使用了 Twisted 异步非阻塞网络库来处理网络通讯,整体架构大致如下(绿线是数据流向): Scrapy主要包括了以下组件: 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 下载器(Downloader)用于下载网页内容, 并将网页内容

Python爬虫从入门到放弃(十七)之 Scrapy框架中Download Middleware用法

这篇文章中写了常用的下载中间件的用法和例子.Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以从这里我们可以知道下载中间件是介于Scrapy的request/response处理的钩子,用于修改Scrapy request和response. 编写自己的下载器中间件 编写下载器中间件,需要定义以下一个或者多个方法的python类 为了演示这里的中间件的使用方法,这里创建一个项目作为学习,这里

Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法

Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分Xpath是专门在XML文件中选择节点的语言,也可以用在HTML上.CSS是一门将HTML文档样式化语言,选择器由它定义,并与特定的HTML元素的样式相关联. XPath选择器 常用的路径表达式,这里列举了一些常用的,XPath的功能非常强大,内含超过100个的内建函数.下面为常用的方法 nodeName 选取此节点的所有节点 / 从根节点选取 // 从匹配选

UEditor (JSP 1.4.3版本) 集成到ssh框架中

一:集成简单步骤 1,下载UEditor文件 下载地址 2,添加jar包 打开下载的文件,结构如下所示,将jsp-lib下面的jar包添加到项目的web-inf 下的lib文件夹中 3,导入源文件 在webContent路径下面创建文件夹(ueditor),将下载的文件全都拷贝进去(除去上部添加的jar包) 4,修改jsp文件 1),首先引入js文件 2),其次编写显示ueditor富文本框的容器 通过以上配置,ueditor基本上就可以使用了. 二:图片显示问题 1,如果ueditor图片上传

Scrapy框架中的Pipeline组件

简介 在下图中可以看到items.py与pipeline.py,其中items是用来定义抓取内容的实体:pipeline则是用来处理抓取的item的管道 Item管道的主要责任是负责处理有蜘蛛从网页中抽取的Item,他的主要任务是清晰.验证和存储数据.当页面被蜘蛛解析后,将被发送到Item管道,并经过几个特定的次序处理数据.每个Item管道的组件都是有一个简单的方法组成的Python类.获取了Item并执行方法,同时还需要确定是否需要在Item管道中继续执行下一步或是直接丢弃掉不处理.简而言之,

Python爬虫从入门到放弃 之 Scrapy框架中Download Middleware用法

这篇文章中写了常用的下载中间件的用法和例子.Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以从这里我们可以知道下载中间件是介于Scrapy的request/response处理的钩子,用于修改Scrapy request和response. 编写自己的下载器中间件 编写下载器中间件,需要定义以下一个或者多个方法的python类 为了演示这里的中间件的使用方法,这里创建一个项目作为学习,这里

scrapy框架中如何使用selenuim

主程序代码: 1 import scrapy 2 from selenium import webdriver 3 4 class SelenuimtestSpider(scrapy.Spider): 5 name = 'selenuimTest' 6 # allowed_domains = ['www.xxx.com'] 7 start_urls = ['http://war.163.com/'] 8 9 def __init__(self): 10 #本地谷歌浏览器的驱动存放地址 11 se