Scrapy的架构初探

Scrapy,Python开发的一个web抓取框架。


1,引言

Python即时网络爬虫启动的目标是一起把互联网变成大数据库。单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想法、技术、人员,所以将会参照众多领先产品,比如,Scrapy,ScrapingHub,Import.io等。

本文简单讲解一下Scrapy的架构。没错,通用提取器gsExtractor就是要集成到Scrapy架构中。

请注意,本文不想复述原文内容,而是为了开源Python爬虫的发展方向找参照,而且以9年来开发网络爬虫经验作为对标,从而本文含有不少笔者主观评述,如果想读Scrapy官方原文,请点击Scrapy官网的Architecture

2,Scrapy架构图

Spiders就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。使用Scrapy创建一个爬虫工程的时候,就会生成一个Spider架子,只需往里面填写代码,按照它的运行模式填写,就能融入Scrapy整体的数据流中。Python即时网络爬虫开源项目的目标是节省下程序员一半以上的时间,关键就是提高Spider的定义和测试速度,解决方案参看1分钟快速生成网页内容提取器,让整个Scrapy爬虫系统实现快速定制的目标。


3,Scrapy的数据流(Data Flow)

Scrapy中的数据流由执行引擎控制,下面的原文摘自Scrapy官网,我根据猜测做了点评,为进一步开发GooSeeker开源爬虫指示方向:

  • The Engine gets the first URLs to crawl from the Spider and schedules them in the Scheduler, as Requests.

URL谁来准备呢?看样子是Spider自己来准备,那么可以猜测Scrapy架构部分(不包括Spider)主要做事件调度,不管网址的存储。看起来类似GooSeeker会员中心的爬虫罗盘,为目标网站准备一批网址,放在罗盘中准备执行爬虫调度操作。所以,这个开源项目的下一个目标是把URL的管理放在一个集中的调度库里面。

  • The Engine asks the Scheduler for the next URLs to crawl.

看到这里其实挺难理解的,要看一些其他文档才能理解透。接第1点,引擎从Spider中把网址拿到以后,封装成一个Request,交给了事件循环,会被Scheduler收来做调度管理的,暂且理解成对Request做排队。引擎现在就找Scheduler要接下来要下载的网页地址。

  • The Scheduler returns the next URLs to crawl to the Engine and the Engine sends them to the Downloader, passing through the Downloader Middleware (request direction).

从调度器申请任务,把申请到的任务交给下载器,在下载器和引擎之间有个下载器中间件,这是作为一个开发框架的必备亮点,开发者可以在这里进行一些定制化扩展。

  • Once the page finishes downloading the Downloader generates a Response (with that page) and sends it to the Engine, passing through the Downloader Middleware (response direction).

下载完成了,产生一个Response,通过下载器中间件交给引擎。注意,Response和前面的Request的首字母都是大写,虽然我还没有看其它Scrapy文档,但是我猜测这是Scrapy框架内部的事件对象,也可以推测出是一个异步的事件驱动的引擎,就像DS打数机的三级事件循环一样,对于高性能、低开销引擎来说,这是必须的。

  • The Engine receives the Response from the Downloader and sends it to the Spider for processing, passing through the Spider Middleware (input direction).

再次出现一个中间件,给开发者足够的发挥空间。

  • The Spider processes the Response and returns scraped items and new Requests (to follow) to the Engine.

每个Spider顺序抓取一个个网页,完成一个就构造另一个Request事件,开始另一个网页的抓取。

  • The Engine passes scraped items and new Requests returned by a spider through Spider Middleware (output direction), and then sends processed items to Item Pipelines and processed Requests to the Scheduler.

引擎作事件分发。

  • The process repeats (from step 1) until there are no more requests from the Scheduler.

持续不断地运行。

4,接下来的工作

接下来,我们将进一步研读Scrapy的文档,实现Python即时网络爬虫与Scrapy的集成。

5,文档修改历史

2016-06-11:V1.0,首次发布

时间: 2024-10-11 06:23:38

Scrapy的架构初探的相关文章

带你轻松了解Scrapy的架构

1. 引言 本文简单讲解一下Scrapy的架构.没错,GooSeeker开源的通用提取器gsExtractor就是要集成到Scrapy架构中,最看重的是Scrapy的事件驱动的可扩展的架构.除了Scrapy,这一批研究对象还包括ScrapingHub,Import.io等,把先进的思路.技术引进来. 请注意,本文不想复述原文内容,而是为了开源Python爬虫的发展方向找参照,而且以9年来开发网络爬虫经验作为对标,从而本文含有不少笔者主观评述,如果想学习Scrapy 官方原文,请点击Scrapy官

【转】Scrapy研究探索(三)——Scrapy核心架构与代码运行分析

转自 http://blog.csdn.net/u012150179/article/details/34441655 学习曲线总是这样,简单例子“浅尝”,在从理论+实践慢慢攻破.理论永远是基础,切记“勿在浮沙筑高台”. 一. 核心架构 关于核心架构,在官方文档中阐述的非常清晰,地址:http://doc.scrapy.org/en/latest/topics/architecture.html. 英文有障碍可查看中文翻译文档,笔者也参与了Scraoy部分文档的翻译,我的翻译GitHub地址:h

Scrapy研究探索(三)——Scrapy核心架构与代码执行分析

学习曲线总是这样,简单样例"浅尝".在从理论+实践慢慢攻破.理论永远是基础,切记"勿在浮沙筑高台". 一. 核心架构 关于核心架构.在官方文档中阐述的非常清晰,地址:http://doc.scrapy.org/en/latest/topics/architecture.html. 英文有障碍可查看中文翻译文档.笔者也參与了Scraoy部分文档的翻译.我的翻译GitHub地址:https://github.com/younghz/scrapy_doc_chs.源rep

Scrapy框架-scrapy框架架构详解

1.Scrapy框架介绍 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自己从零开始写的话,比较浪费时间.因此Scrapy把一些基础的东西封装好了,在他上面写爬虫可以变的更加的高效(爬取效率和开发效率).因此真正在公司里,一些上了量的爬虫,都是使用Scrapy框架来解决. 2.Scrapy架构图 流程图1: 流程图2: 3.Scrapy框架模块功能 Scrapy Engine(引擎):Scrapy

Scrapy爬虫架构安装过程

水平有限,慢慢成长中. 环境: win 8.1 python 2.7.11 官方的相关的指南,相对有些简单: http://scrapy-chs.readthedocs.org/zh_CN/0.24/intro/install.html#intro-install 注:红色字体为命令. 过程: 1 安装下载python2.7 www.python.org(注意安装的时候选择将安装目录加入到系统路径中) 2 安装依赖插件 大于2.7.9的python2都带有pip,2.7.11的pip默认版本是7

Scrapy框架爬虫初探——中关村在线手机参数数据爬取

关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面进行爬取,大体思路如下图所示. 1 # coding:utf-8 2 import scrapy 3 import re 4 import os 5 import sqlite3 6 from myspider.items import SpiderItem 7 8 9 class ZolSpide

Android中的MVP架构初探

说来惭愧,MVP的架构模式已经在Android领域出现一两年了,但是到今天自己才开始Android领域中的MVP架构征程.闲话不多说,开始吧! 一.架构演变概述 我记得我找第一份工作时,面试官问我"android是否属于MVC架构模式,简述一下".确实,Android的整体设计结构就是MVC的设计模式,在J2EE的开发中,使用的也是MVC模式,MVC模式是一个经典,经历了几十年的考验.Android项目中的MVC架构: View:是应用程序中处理数据显示的部分,对应于layout文件下

React Native For Android 架构初探

Facebook 在2015.9.15发布了 React Native for Android,把JavaScript 开发技术扩展到了Android平台.React Native 让开发者使用 JavaScript 和 React 编写应用,利用相同的核心代码就可以创建 基于Web,iOS 和 Android 平台的原生应用.本文将浅析Android React的架构及相关基础知识.环境搭建及调试相关知识参考官网文档即可,本文不再赘述. 一.React架构分析 1.层次架构: Java层:ja

DDD「领域驱动设计」分层架构初探

前言 基于 DDD 传统分层架构实现. 项目 github地址:https://github.com/WuMortal/DDDSample 这个分层架构是工作中项目正在使用的分层架构,使用了一段时间发现受益匪浅,所以整理好我对该分层架构的一些理解分享给大家,我对于该分层架构还处于学习阶段理解有误的地方请指出.本次会以一个案例来说明各个分层的作用以及他们之间的调用关系,还有本次的重点不在于DDD,因为这个我还未能完全理解,当然避免不了中间会涉及DDD的一些概念. DDD 简单介绍 DDD 什么?为