开发,设计,生活

网络爬虫系统

  • 2014-03-28 18:54:13 2014-06-18 09:00:30[U] 网络爬虫系统

    关于本文档

    近期的项目使用 scrapy 作为基本组件的分布式爬虫,在开发的过程中遇到了一些问题,总结记录下。

    文档对应的 scrapy 版本:0.22.2

    所有的资料方法都来自:

    1. 官方文档
    2. scrapy 源代码


    scrapy 简介

    scrapy 是使用python语言开发的网络爬虫框架。 具有下面几个特点:

    1. 设计简单,用户只需要简单定义数据提取规则,让scrapy完成抓取的工作,即可获取数据。
    2. 提供丰富的插件扩展机制
    3. 开源,100%用python编写(基于twisted框架)
    4. 官方文档比较详细


    scrapy 主要组件

    1. scrapy engine, 控制整个爬虫的运行,请求调度,spider调用,下载调用,信号事件触发
    2. spider(蜘蛛), 用来解析页面的类,解析后创建新的请求,或者创建数据结果集合
    3. scheduler(调度器), 负责管理请求(来自spider),存入队列,执行时返回给 scrapy引擎
    4. Downloader(下载器),抓取页面并返回结果给spider
    5. Item pipeline(item管道), 处理网页中抽取的数据结果,进行清洗,校验,存储等操作
    6. Downloader middlewares(下载器中间件),下载器与spider之间的勾子,可以对请求和响应的数据进行操作
    7. extensions(扩展),在scrapy启动时初始化,提供增强的辅助功能


    上面是我主要用到的一些组件,还有 spider middlerwares等没包含在内


    scrapy 运行机制

    1. 引擎调用蜘蛛获取第一个要抓取的url, 存入调度器
    2. 引擎从调度器获取请求url(上面放入的url),
    3. 引擎传递请求 -> 下载中间件 -> 下载器
    4. 下载器下载页面,响应结果 -> 下载中间件 -> 引擎
    5. 引擎把响应结果交给蜘蛛处理
    6. 蜘蛛处理响应,创建结果Item和新的请求
    7. 结果item交给 item管道处理
    8. 新的请求存入调度器,重复上面的操作


    本系列包含的主题

    1. 基本网页抓取(spider item pipeline)开发
    2. downloader middlewares 开发
    3. 解决执行 javascript 页面的抓取
    4. downloader(下载器)开发
    5. extensions(扩展)开发
    6. 调试 scrapy
    7. scrapy 开发中的问题合集(跟随项目更新)