Pyspider

 

Pyspider是由国人(binux)编写的强大的网络爬虫系统

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

基本功能

  1. 提供了方便易用的 WebUi 系统,可视化的编写和调试爬虫
  2. 提供爬去进度监控 / 爬去结果查看 / 爬虫项目管理等功能
  3. 支持多种后端数据库,如:MySQL / MongoDB / Rides 等
  4. 支持多种消息队列,如:RabbimMQ / Beanstalk / Redis / Kombu
  5. 提供优先级控制 / 失败重试 / 定时抓取等
  6. 对接了PhantonJS。可以抓取Javascript 渲染的页面
  7. 支持单机和分布式部署,支持 Docker 部署

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 / Pipelinc / Extension 等组件来实现非常强大的功能。模块之间的耦合度低,可扩展性高

如果要快速实现一个页面的抓取,推荐使用 Pyspider ,开发更便捷 ,如:爬去某个新闻网站内容

如果要对应反爬程度很大,规模较大的爬去。推荐使用 Scrapy ,如:封IP / 封账号风险大,高频率验证的网站

Pyspider 架构

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

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

执行逻辑

Pyspider 的任务执行流程逻辑很清晰。

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

Pyspider基本使用

环境准备:

  • Pyspider
  • PhantomJS
  • MongoDB
  • Pymongo

在下载Pyspider 时会遇到报错

在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl 中下载python 对应的版本及计算机位数

切换目录至下载文件所在目录。进入cmd。进行安装

然后重新打开cmd,进行pip install pyspider,如果安装途中出现了。错误多试几次。即可

运行 pyspider -- pyspider all

启动的时候可能一直卡在result_worker starting 或者 出现报错

ValueError: Invalid configuration: - Deprecated option 'domaincontroller': use 'http_authenticator

如果出现卡顿状态。在出现 result_worker starting 之前 使用 CTRL + C 终止。在次启动即可。

如果出现了报错。原因是因为WsgiDAV发布了版本 pre-release 3.x。在安装包中找到pyspider的资源包,然后找到webui文件里面的webdav.py文件打开,修改第209行即可。

目标位置 : 'domaincontroller': NeedAuthController(app),

更改为 :  http_authenticator':{
    'HTTPAuthenticator':NeedAuthController(app),
     },

再次输入pyspider all 即可

打开浏览器127.0.0.1:5000或者http://localhost:5000/ 打开pyspider的web UI界面,

创建项目

create --> Project Name --> Start URL(s) -- > create

在上面的页面中:

  • 左侧为代码调试界面
  • RUN为单步调试爬虫程序,
  • 左侧下半部分可以预览当前的爬虫页面
  • 右侧部分为代码编辑和保存

在创建好项目时。pyspider 就已经帮我生成了一小段代码(右侧部分),这里的 Handler 就是 pyspider 爬虫的主类。可以在这里定义爬虫 / 解析 / 存储的逻辑,整个爬虫只需要一个 Handler 就可以完成

在 Handler 类中:

crawl_config -- 这个类属性可以将整个项目的配置统一写在这个(代理 等),配置之后全局生效
on_start() -- 这是爬虫入口,初时的爬取请求会在这里产生,该方法通过调用crawl() 方法即可新建一个爬取请求,它的第一个参数为爬取的 URL,这里会自动生成为创建项目时输入的 URL,crawl() 还有有一个参数为 callback,它指定了这个页面爬取完毕后使用哪个方法进行解析
index_page() -- 结合上面代码。发现。on_start() 方法。爬取结束后。将 response 交给 index_page()解析。index_page() 对接了 pyquery,直接使用 doc()来解析页面,解析后进行了便利。调用了 crawl() 方法。又生成了新的爬取请求,同时又指定了 callback
detail_page() -- 同样接收了 response 作为参数。detail_page() 爬取的是详情页的信息,就不会产生新的请求,只对response 对象做解析,解析之后将结果以字典的形式返回

在点击 RUN 时。如果出现了报错:

HTTP 599: SSL certificate problem: self signed certificate in certificate chain

在 crawl 方法中加入忽略证书验证的参数,validate_cert=False

如果出现了:

[E 160329 14:00:56 base_handler:194] crawl() got unexpected keyword argument: ['validate_cert']

无法匹配到 validate_cert 参数,那么则是 PySpider 本身的问题,可以在GitHub下载0.4.0版本

https://github.com/binux/pyspider

下载完毕后进行解压。将 pyspider 下的所有文件目录 更新到之前的 pyspider 中

如果。出现了web 预览页面大小问题。可以在 C:\Python36\Lib\site-packages\pycparser\webui\static\debug.min.css 中 找到 iframe ,将其替换为 iframe{border-width:0;width:100%;height:900px !important}

更改完毕后。清空浏览器缓存,重启浏览器即可。

案列:

以去哪网为案列

点击RUN。调用on_start()方法。生成新的请求(follows提示),点击follows,在点击小箭头。发起请求

可以点击web / html 预览页面和查看源代码

可以使用spider 提供的 CSS选择器来定位某个标签。来进行查找内容

点击Save后。点击RUN,获取当前页面的所有URL(代码之前写好的。会出现不同现象)

由于要获取多个页面的信息。所以在代码部分。需要添加,会看到最有最后一条是第二页的URL

点击其中的某一条后的小箭头。点击RUN。返回详情页的信息

利用CSS选择器进行定位。在 detail_page 方法中进行获取详细信息

在项目首页中可以看到下面所展示

  1. group :定义分组。方便管理
  2. rate / burst :代表当前的爬取速率,rate代码一秒发出多少个请求,burst相当于流量控制中的令牌算法的令牌数量。rate / burst 越大。爬取速率越快。
  3. progress :5m / 1h / 1d 代表最近5分钟 / 1小时 / 一天内的请求情况。all 代表所有的请求情况,颜色不同代表不同的状态,蓝色代表等待被执行的请求,绿色代表成功的请求,黄色代表请求失败后等在重试的请求,红色代表失败次数过多而被忽略的请求
  4. run :执行
  5. Actice Tasks :查看最近请求的详细情况
  6. Result :查看爬取结果

以上就是pyspider 的使用

Pyspider的简单介绍和初使用的更多相关文章

  1. K8S Kubernetes 简单介绍 转自 http://time-track.cn/kubernetes-trial.html Kubernetes初体验

    这段时间学习了一下 git jenkins docker  最近也在看  Kubernetes  感觉写得很赞  也是对自己对于K8S 有了进一步得理解  感谢 倪 大神得Blog 也希望看到这篇Bl ...

  2. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  3. 【转载】JMeter学习(一)工具简单介绍

    JMeter学习(一)工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静 ...

  4. JMeter学习工具简单介绍

    JMeter学习工具简单介绍   一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态 ...

  5. Pyspider爬虫简单框架——链家网

    pyspider 目录 pyspider简单介绍 pyspider的使用 实战 pyspider简单介绍 一个国人编写的强大的网络爬虫系统并带有强大的WebUI.采用Python语言编写,分布式架构, ...

  6. Java泛型使用的简单介绍

    目录 一. 泛型是什么 二. 使用泛型有什么好处 三. 泛型类 四. 泛型接口 五. 泛型方法 六. 限定类型变量 七. 泛型通配符 7.1 上界通配符 7.2 下界通配符 7.3 无限定通配符 八. ...

  7. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  8. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  9. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

随机推荐

  1. 官网英文版学习——RabbitMQ学习笔记(二)RabbitMQ安装

    一.安装RabbitMQ的依赖Erlang 要进行RabbitMQ学习,首先需要进行RabbitMQ服务的安装,安装我们可以根据官网指导进行http://www.rabbitmq.com/downlo ...

  2. JavaWeb面试题(转)

    1.Tomcat的优化经验 答:去掉对web.xml的监视,把JSP提前编辑成Servlet:有富余物理内存的情况下,加大Tomcat使用的 JVM内存. 2.什么是Servlet? 答:可以从两个方 ...

  3. idea 将java 项目 打包成jar包

    记录一下,防止忘记.ps : 请忽略这个是web项目 1.idea 打包jar包 (1)首先打开Project Structure,选中Artifacts (2)点击绿色加号,选中jar ,然后选中f ...

  4. django-ckeditor使用

    django-ckeditor 1 安装 pip install ckeditor 2 配置 INSTALLED_APPS中添加 'ckeditor', 修改写入字段的格式 主题相关配置(settin ...

  5. 107-PHP类成员属性赋值

    <?php class mao{ //定义猫类 public $age; //定义多个成员属性 protected $weight; private $color; } $mao1=new ma ...

  6. 留学论文Results部分英文写作句型整理

    本文分享曼切斯特大学全校语言项目负责人约翰·莫莱博士(Dr John Morley)给出的与结果介绍相关的句型,小编为大家整理了一下一共分为了11类,看完之后觉得非常有用,这里分享给大家,各位留学小伙 ...

  7. Flink笔记(二) DataStream Operator(数据流操作)

    DataStream Source 基于文件 readTextFile(path) 读取 text 文件的数据 readFile(fileInputFormat, path) 通过自定义的读取方式, ...

  8. SpringBoot安全认证Security

    一.基本环境搭建 父pom依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactI ...

  9. MFC 实现CTreeCtrl单选

    void CDepartmenManager::SetUncheck(HTREEITEM hTree) { if (!hTree){ return; } m_DePartmentView.SetChe ...

  10. 修改虚拟机ip

    在命令行里输入:more  /etc/sysconfig/network-scripts/ifcfg-eth0 (注意more后要空一格,还有eth0,最后是数字零).  然后再输入:ifconfig ...