专栏首页coder修行路Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍

Scrapy目前已经可以很好的在python3上运行 Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的,并且比较适合异步的代码。对于会阻塞线程的操作包含访问文件、数据库或者Web、产生新的进程并需要处理新进程的输出(如运行shell命令)、执行系统层次操作的代码(如等待系统队列),Twisted提供了允许执行上面的操作但不会阻塞代码执行的方法。

Scrapy data flow(流程图)

Scrapy数据流是由执行的核心引擎(engine)控制,流程是这样的: 1、爬虫引擎ENGINE获得初始请求开始抓取。 2、爬虫引擎ENGINE开始请求调度程序SCHEDULER,并准备对下一次的请求进行抓取。 3、爬虫调度器返回下一个请求给爬虫引擎。 4、引擎请求发送到下载器DOWNLOADER,通过下载中间件下载网络数据。 5、一旦下载器完成页面下载,将下载结果返回给爬虫引擎ENGINE。 6、爬虫引擎ENGINE将下载器DOWNLOADER的响应通过中间件MIDDLEWARES返回给爬虫SPIDERS进行处理。 7、爬虫SPIDERS处理响应,并通过中间件MIDDLEWARES返回处理后的items,以及新的请求给引擎。 8、引擎发送处理后的items到项目管道,然后把处理结果返回给调度器SCHEDULER,调度器计划处理下一个请求抓取。 9、重复该过程(继续步骤1),直到爬取完所有的url请求。

各个组件介绍

爬虫引擎(ENGINE) 爬虫引擎负责控制各个组件之间的数据流,当某些操作触发事件后都是通过engine来处理。

调度器(SCHEDULER) 调度接收来engine的请求并将请求放入队列中,并通过事件返回给engine。

下载器(DOWNLOADER) 通过engine请求下载网络数据并将结果响应给engine。

Spider Spider发出请求,并处理engine返回给它下载器响应数据,以items和规则内的数据请求(urls)返回给engine。

管道项目(item pipeline) 负责处理engine返回spider解析后的数据,并且将数据持久化,例如将数据存入数据库或者文件。

下载中间件 下载中间件是engine和下载器交互组件,以钩子(插件)的形式存在,可以代替接收请求、处理数据的下载以及将结果响应给engine。

spider中间件 spider中间件是engine和spider之间的交互组件,以钩子(插件)的形式存在,可以代替处理response以及返回给engine items及新的请求集。

如何创建Scrapy项目

创建Scrapy项目

创建scrapy项目的命令是scrapy startproject 项目名,创建一个爬虫 进入到项目目录scrapy genspider 爬虫名字 爬虫的域名,例子如下:

zhaofandeMBP:python_project zhaofan$ scrapy startproject test1
New Scrapy project 'test1', using template directory '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scrapy/templates/project', created in:
    /Users/zhaofan/Documents/python_project/test1

You can start your first spider with:
    cd test1
    scrapy genspider example example.com
zhaofandeMBP:python_project zhaofan$ 
zhaofandeMBP:test1 zhaofan$ scrapy genspider shSpider hshfy.sh.cn
Created spider 'shSpider' using template 'basic' in module:
  test1.spiders.shSpider

scrapy项目结构

items.py 负责数据模型的建立,类似于实体类。 middlewares.py 自己定义的中间件。 pipelines.py 负责对spider返回数据的处理。 settings.py 负责对整个爬虫的配置。 spiders目录 负责存放继承自scrapy的爬虫类。 scrapy.cfg scrapy基础配置

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python爬虫从入门到放弃(二十二)之 爬虫与反爬虫大战

    爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序 反爬虫:使用技术手段防...

    coders
  • Python爬虫从入门到放弃(十三)之 Scrapy框架的命令行详解

    这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名 例子如下: localhost:spider ...

    coders
  • Docker入门简介

    Docker的概念 什么是Docker? Docker是一个开源平台,包含:容器引擎和Docker Hub注册服务器 Docker容器引擎:可以将开发者打包他们...

    coders
  • 科普系列——如何解释什么是 AJAX?

    学妹这学期新开了一门课《Script及AJAX开发技术》,然而临近学期末,她突然跑来问我:到底什么是AJAX ?相信很多人(尤其是前端)在写代码的时候经常会用到...

    出其东门
  • 王老板Python面试(9):整理的最全 python常见面试题(基本必考)

    1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list、dict、tuple等这类容器对象,使用...

    Python之道
  • Spring Cloud 之 Zuul.

     API 网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的 Facade 模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访...

    JMCui
  • 又面试了Python爬虫工程师,碰到这么

    采取可读性更强的 xpath 代替正则强大的统计和 log 系统,同时在不同的 url 上爬行支持 shell 方式,方便独立调试写 middleware,方便...

    py3study
  • Ajax第一节

    异步: 不受当前任务的影响,两件事情同时进行,做一件事情时,不影响另一件事情的进行。

    用户3461357
  • AJAX

     AJAX是异步的JavaScript和XML,是一种用于创建快速动态网页的技术,使用AJAX可以更新部分网页内容,是非常方便使用的

    用户3159471
  • host、referer和origin的区别

    举个简单的例子: 我在IP地址为127.0.0.1的服务器上,通过apache配置了两个虚拟主机:a.com,b.com,这两个域名通过DNS解析都会指向127...

    挥刀北上

扫码关注云+社区

领取腾讯云代金券