zoukankan      html  css  js  c++  java
  • scrapy架构设计分析

    scrapy是一个Python爬虫框架。我们自己用requests也能写爬虫(GET某个URL,然后Parse网页的内容),那么,问题来了,scrapy高明在哪些地方呢?下面就来讨论下这个话题,看看业界通用的爬虫是怎么设计的。

    从[1]可得scrapy架构图。它由5个核心模块组成。

    5个模块功能

    • (1) 最重要的模块是Engine:它是数据流的指挥官,负责控制数据流(控制各个模块之间的通信);
    • (2) scheduler:负责将Engine提交的URL排成一个队列;
    • (3) spider:用户自己写的代码放在spider。主要负责HTTP response的解析,从回复的HTML中提取关键数据。
    • (4) downloader:负责跟URL对应的server通信,并获取返回的内容。
    • (5) item pipeline:负责处理spider提取出来的信息,一般用于做跟DB相关的操作。

    2个中间件

    中间件是处于两个模块之间的一种特殊hook,它的目的是提供一种简易的机制,通过插拔用户自己写的代码,来扩展新功能。

    典型的数据流

    • (1) Engine启动,从spider中读出要爬的第一个URL
    • (2) Engine将读到的第一个URL送给scheduler
    • (3) Engine向scheduler请求下一个要爬的URL
    • (4) scheduler从队列中读出一个URL,送给Engine,Engine将这个URL送到downloader
    • (5) downloader去GET这个URL,并将HTTP response生成一个Response对象。downloader将生成的Response返回给Engine
    • (6) Engine将这个Response对象发给spider
    • (7) spider处理这个Response对象,提取其中的信息,生成item。还会生成新的请求。并将item和请求送给Engine
    • (8) Engine将收到的请求送给scheduler,将收到的item送给item pipline
    • (9) 重复步骤(2),直到没有URL需要继续处理

    所有的处理流程都需要经过 Scrapy Engine,然后到达下一个流程

    源自 http://blog.csdn.net/ybdesire/article/details/51559255

  • 相关阅读:
    hdu4277 暴力
    hdu4271 Find Black Hand 2012长春网络赛E题 最短编辑距离
    poj3356 字符串的最小编辑距离 dp
    HDU4267 A Simple Problem with Integers 线段树/树状数组
    树链剖分 模版
    SPOJ375 Query on a tree 树链剖分
    Orz_panda cup I题 (xdoj1117) 状压dp
    27号的十道离线线段树
    The 2015 "Orz Panda" Cup Programming Contest
    codeforces #274 C. Riding in a Lift dp+前缀和优化
  • 原文地址:https://www.cnblogs.com/fly-kaka/p/6856173.html
Copyright © 2011-2022 走看看