• 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:Python36Libsite-packagespycparserwebuistaticdebug.min.css 中 找到 iframe ,将其替换为 iframe{border-0;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 的使用

  • 相关阅读:
    计算机书籍.网址
    MVC是必知必用的
    技术
    三色旗帜分类
    巴斯卡三角形
    Centos安装wine等组件的问题
    some software that is used to speed up your system
    驾照考试系统之流程图
    用静态成员函数调用非静态成员变量
    MFC 进度条控件
  • 原文地址:https://www.cnblogs.com/Rxtong/p/11318138.html
Copyright © 2020-2023  润新知