PySpider框架简介及安装

标签: 程序开发 Python 数据抓取 网络爬虫 | 发表时间:2018-08-15 12:55 | 作者:标点符
出处:https://www.biaodianfu.com

PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。

PySpider功能简介

PySpider带有强大的WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,它支持多种数据库后端、多种消息队列、Javascript渲染页面的爬取,使用起来非常的方便。

PySpider的基本功能:

  • 提供方便易用的 WebUI 系统,可视化地编写和调式爬虫
  • 提供爬取进度监控、爬取结果查看、爬虫项目管理等功能。
  • 支持多种后端数据库,如 MySQL、MongoDB、Reids、SQLite、Elasticsearch、PostgreSQL。
  • 支持多种消息队列、如 RabbitMQ、Beanstalk、Redis、Kombu。
  • 提供优先级控制、失败重试、定时抓取等功能。
  • 对接了 PhantomJS、可以抓取 JavaScript 渲染的页面。
  • 支持单机和分布式部署、支持 Docker 部署。

PySpider的设计基础是:

  • 以python脚本驱动的抓取环模型爬虫
  • 通过python脚本进行结构化信息的提取,follow链接调度抓取控制,实现最大的灵活性
  • 通过web化的脚本编写、调试环境。web展现调度状态
  • 抓取环模型成熟稳定,模块间相互独立,通过消息队列连接,从单进程到多机分布式灵活拓展

PySpider与 Scrapy的比较:

  • PySpider提供了WebUI,爬虫的编写、调试都是再WebUI中进行。而Scrapy原生是不具备这些功能的,它采取的是代码和命令行操作,但是可通过Portia实现可视化配置。
  • PySpider调试非常的方便。WebUI操作便捷直观。Scrapy则是使用parse命令进行调试,其方便程度不及PySpider。
  • PySpider支持PhantomJS来进行Javascript渲染也买你的额采集。Scrapy可以对接Scrapy-Splash组件,这需要额外配置。
  • PySpider内置了PyQuery作为选择器,Scrapy对接了XPath、CSS选择器和正则匹配。
  • PySpider的可扩展程度不足,可配置化程度不高。Scrapy可通过对接Middleware、Pipeline、Extension等组件实现非常强大的功能,模块之间的耦合程度低,可扩展程度极高。

如果想要快速方便地实现一个页面的抓取,使用 pyspider 不失为一个好的选择。如快速抓取某个普通新闻网站的新闻内容。但如果应对反爬程度很强、超大规模的抓取、推荐使用 Scrapy、如抓取封 IP、封账号、高频验证的网站的大规模数据采集。

PySpider 的架构

PySpider 的架构主要分为 Scheduler(调度器)、Fetcher(抓取器)、Processer(处理器)三个部分。整个爬取过程受到 Monitor(监控器)的监控,抓取的结果被 Result Worker(结果处理器)处理。

Scheduler 发起任务调度,Fetcher 负责抓取网页内容,Processer 负责解析网页内容,然后将新生成的 Request 发给 Scheduler 进行调度,将生成的提取结果输出保存。

模块 功能
WebUI web的可视化任务监控

web脚本编写,单步调试

异常捕获,log捕获,print捕获等

Scheduler 任务优先级

周期定时任务

流量控制

基于时间周期 或 前链标签(例如更新时间)的重抓取调度

Fetcher dataurl支持,用于假抓取模拟传递

method, header, cookie, proxy, etag, last_modified, timeout等抓取调度控制

通过适配类似 phantomjs 的webkit引擎支持渲染

Processer 内置的pyquery,以jQuery解析页面

在脚本中完全控制调度抓取的各项参数,

向后链传递信息

异常捕获

PySpider 的任务执行流程的逻辑很清晰,具体过程如下所示:

  • 每个 PySpider项目对应一个 Python 脚本,该脚本定义了一个 Handler 类,它有一个 on_start() 方法。爬取首先调用 on_start() 方法生成最初的抓取任务,然后发送给 Scheduler。
  • Scheduler 将抓取任务分发给 Fetcher 进行抓取,Fetcher 执行并得到响应、随后将响应发送给 Processer。
  • Processer 处理响应并提取出新的 URL 生成新的抓取任务,然后通过消息队列的方式通知 Scheduler 当前抓取任务执行情况,并将新生成的抓取任务发送给 Scheduler。如果生成了新的提取结果,则将其发送到结果队列等待 Result Worker 处理。
  • Scheduler 接收到新的抓取任务,然后查询数据库,判断其如果是新的抓取任务或者是需要重试的任务就继续进行调度,然后将其发送回 Fetcher 进行抓取。
  • 不断重复以上工作、直到所有的任务都执行完毕,抓取结束。
  • 抓取结束后、程序会回调 on_finished() 方法,这里可以定义后处理过程。

PySpider的安装

PySpider的安装非常的简单,只需执行:

pip install pyspider
  即可,但是执行过程中可能会报如下错误:

PS C:\windows\system32> pip install pyspider
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting pyspider
  Downloading http://mirrors.aliyun.com/pypi/packages/d0/97/d6062c928f53d899ff2a8538fed11d4d425ba3d27c96248a2c601c1c9fef/pyspider-0.3.10.tar.gz (110kB)
    100% |████████████████████████████████| 112kB 178kB/s
Requirement already satisfied: Flask>=0.10 in d:\python37\lib\site-packages (from pyspider) (1.0.2)
Requirement already satisfied: Jinja2>=2.7 in d:\python37\lib\site-packages (from pyspider) (2.10)
Requirement already satisfied: chardet>=2.2 in d:\python37\lib\site-packages (from pyspider) (3.0.4)
Requirement already satisfied: cssselect>=0.9 in d:\python37\lib\site-packages (from pyspider) (1.0.3)
Requirement already satisfied: lxml in d:\python37\lib\site-packages (from pyspider) (4.2.4)
Collecting pycurl (from pyspider)
  Downloading http://mirrors.aliyun.com/pypi/packages/e8/e4/0dbb8735407189f00b33d84122b9be52c790c7c3b25286826f4e1bdb7bde/pycurl-7.43.0.2.tar.gz (214kB)
    100% |████████████████████████████████| 215kB 202kB/s
    Complete output from command python setup.py egg_info:
    Please specify --curl-dir=/path/to/built/libcurl

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 10 in D:\MyConfiguration\qw\AppData\Local\Temp\pip-install-8t_d95bq\pycurl\

发生报错的原因是pycurl没有被正确安装,中间出现了编译错误,解决方案是:到 https://www.lfd.uci.edu/~gohlke/pythonlibs/

下载对应的 .whl文件,并进项安装即可。

PS E:\Download> pip install .\pycurl-7.43.1-cp37-cp37m-win_amd64.whl

安装完成后再命令行执行

pyspider
  打开 http://localhost:5000/ 即可访问控制台

参考链接:

The post PySpider框架简介及安装 appeared first on 标点符.

相关 [pyspider 框架 简介] 推荐:

PySpider框架简介及安装

- - 标点符
PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI. 采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器. PySpider带有强大的WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,它支持多种数据库后端、多种消息队列、Javascript渲染页面的爬取,使用起来非常的方便.

Android orm 框架xUtils简介 - lsc183

- - 博客园_首页
  数据库操作建议用ORM框架,简单高效. 这里推荐xUtils,里面包含DBUtils. github地址:https://github.com/wyouflf/xUtils.   获得数据库实例建议用单例模式.   创建一个实体类,对应数据库中的表.     private int id; //主键ID,必须.

缓存、缓存算法和缓存框架简介

- - 博客 - 伯乐在线
英文原文: jtraining,译文: Lixiang. 我们都听过 cache,当你问他们是什么是缓存的时候,他们会给你一个完美的答案,可是他们不知道缓存是怎么构建的,或者没有告诉你应该采用什么标准去选择缓存框架. 在这边文章,我们会去讨论缓存,缓存算法,缓存框架以及哪个缓存框架会更好. “缓存就是存贮数据(使用频繁的数据)的临时地方,因为取原始数据的代价太大了,所以我可以取得快一些.

Zookeeper开源客户端框架Curator简介

- - 编程语言 - ITeye博客
Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架. Netflix在用ZooKeeper的过程中遇到的问题, 我们也遇到了, 所以开始研究一下, 首先从他在github上的源码, wiki文档以及Netflix的技术blog入手. .

六款值得推荐的Android开源框架简介

- - 移动开发 - ITeye博客
六款值得推荐的Android开源框架简介. 技术不再多,知道一些常用的、不错的就够了. 下面就是最近整理的“性价比”比较高的Android开源框架,应该是相对实用的. 项目地址 https://github.com/smanikandan14/Volley-demo. JSON,图像等的异步下载;.

PHP框架 Yaf

- Le - 开源中国社区最新软件
Yaf是一个C语言编写的PHP框架,Yaf 的特点: 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存. 更短的内存周转周期, 提高内存利用率, 降低内存占用率. 支持全局和局部两种加载规则, 方便类库共享.

Flask-Babel 简介

- yinseny - python.cn(jobs, news)
本文有一个格式好看一点,并且有语法高亮的版本放在 readthedocs,欢迎浏览. 本文是原创,不是翻译,不过本文其实是谈翻译的. 话说用 wordpress 的 WYSIWYG 编辑器写这样的文章真痛苦啊,格式一不小心就乱了,本文是用 rst 写成,编译为 html,然后贴到这边来的. 最近用 Flask 给公司做了个小 web 应用,做的时候用英文了,现在要求翻译成中文.

AsciiDoc简介

- dayu - 桃源
AsciiDoc 是一种简单的基于纯文本的文档生成工具, 与它类似的还有 reStructuredText, Markdown. 说是生成文档, 其实它可以将纯文本文件转换成各种类型, 比如:. Man Page (示例). Graphviz 图形 (示例). 使用AsciiDoc进行文档编写最著名的恐怕是Git官方的 Git User’s Manual (我表示对于初学者很难看懂), 这篇博客也是通过AsciiDoc生成, 文后会附上本文的原始代码以便参考..

ABAP简介

- - 博客园_首页
中文名称:高级企业应用编程语言. 英文全称:Advanced Business Application Programming. 德语全称:Allgemeiner Berichtsaufbereitungsprozessor(通用报表预处理器). 概述:一种高级编程语言,起源于20世纪80年代,由德国软件公司SAP开发,主要用作SAP的编程,现行版本为ABAP/4,同时支持面向过程和面向对象.

json简介

- - ITeye博客
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成. 它基于ECMA262语言规范(1999-12第三版)中JavaScript编程语言的一个子集. JSON采用与编程语言无关的文本格式,但是也使用了类C语言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的习惯,这些特性使JSON成为理想的数据交换格式.