• pyspider的代码架构解析


    pyspider的主要架构如下图

    1. webui

    在线编写、调试爬虫脚本;
    在线监控任务执行情况;

    2. scheduler

    调度任务,粗浅的理解就是定时执行爬虫脚本;

    这是一个核心部件;不止是定时爬取那么简单。
    爬取的时候要递归爬取网页,
    爬取网页的时候要设置优先级,优先爬取列表页。
    爬虫任务爬取时要判断当前网页是否过期;
    如果当前网页过期,要支持"HTTP 304"的请求方式,减轻对方压力。
    ("HTTP 304"是个人的说法,也就是请求时带上If-Modified-Since、If-None-Match字段,如果文件未变更对方返回304)

    来看具体的代码

    也就是说:pyspider通过tornado来做的事件驱动。
    任务前: 要读取任务数据,
    任务后: 要将新数据入库。
    任务中: 产生的新任务要放到任务队列中去。

    事件驱动库:简单理解就是通过io复用的方式,关联一个回调函数,再加一些定时事件封装的库。
    事件驱动的好处就是不用来个任务就给分配一个线程,避免了频繁的CPU上线文切换,提高了性能,支持更大的并发。

    3. fetcher

    抓取网页

    并不只是下载网页那么简单,更类似于一个浏览器;
    支持修改和控制method, header, cookie, proxy, etag, last_modified, timeout等字段;
    支持dataURL
    可以通过适配类似phantomjs的webkit引擎支持渲染
    目标一般不希望爬虫总是去访问它。不伪装一下自己,别人不一定让你爬的。

    4. processor

    对返回的网页进行解析。
    执行你写的脚本对网页内容进行解析,解析出来的链接还可以重新放到scheduler中轮回。

    总结

    对scheduler、fetcher的干预,通常通过配置和注解实现;
    你写的代码部分是通过processor执行的。
    从另一个角度讲scheduler和fetcher也都算是任务。processor执行的不单是你写的代码。
    对于普通的使用方法,官网写得很全,可以参考官网:http://docs.pyspider.org/en/latest/apis/self.crawl/

  • 相关阅读:
    JS控制台打印星星,总有你要的那一款~
    css居中方法
    line-height
    position定位
    IE盒子模型
    CSS中的盒模型
    CSS中的BEM命名
    循环语句总结(代码以C#为例)
    程序设计中的数学思维函数总结(代码以C#为例)
    转:SpringBoot 自定义异常@ContollerAdvice ExceptionHandler不起作用
  • 原文地址:https://www.cnblogs.com/bugutian/p/14097309.html
Copyright © 2020-2023  润新知