浅谈Scrapy网络爬虫框架的工作原理和数据采集


Posted in Python onFebruary 07, 2019

今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助。

1、Scrapy爬虫框架

Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且使用起来非常的方便。它可以应用在数据采集、数据挖掘、网络异常用户检测、存储数据等方面。

Scrapy使用了Twisted异步网络库来处理网络通讯。整体架构大致如下图所示。

浅谈Scrapy网络爬虫框架的工作原理和数据采集

2、由上图可知Scrapy爬虫框架主要由5个部分组成,分别是:Scrapy Engine(Scrapy引擎),Scheduler(调度器),Downloader(下载器),Spiders(蜘蛛),Item Pipeline(项目管道)。爬取过程是Scrapy引擎发送请求,之后调度器把初始URL交给下载器,然后下载器向服务器发送服务请求,得到响应后将下载的网页内容交与蜘蛛来处理,尔后蜘蛛会对网页进行详细的解析。蜘蛛分析的结果有两种:一种是得到新的URL,之后再次请求调度器,开始进行新一轮的爬取,不断的重复上述过程;另一种是得到所需的数据,之后会转交给项目管道继续处理。项目管道负责数据的清洗、验证、过滤、去重和存储等后期处理,最后由Pipeline输出到文件中,或者存入数据库等。

3、这五大组件及其中间件的功能如下:

1) Scrapy引擎:控制整个系统的数据处理流程,触发事务处理流程,负责串联各个模块

2) Scheduler(调度器):维护待爬取的URL队列,当接受引擎发送的请求时,会从待爬取的URL队列中取出下一个URL返回给调度器。

3) Downloader(下载器):向该网络服务器发送下载页面的请求,用于下载网页内容,并将网页内容交与蜘蛛去处理。

4) Spiders(蜘蛛):制定要爬取的网站地址,选择所需数据内容,定义域名过滤规则和网页的解析规则等。

5) Item Pipeline(项目管道):处理由蜘蛛从网页中抽取的数据,主要任务是清洗、验证、过滤、去重和存储数据等。

6) 中间件(Middlewares):中间件是处于Scrapy引擎和Scheduler,Downloader,Spiders之间的构件,主要是处理它们之间的请求及响应。

Scrapy爬虫框架可以很方便的完成网上数据的采集工作,简单轻巧,使用起来非常方便。

4、 基于Scrapy的网络爬虫设计与实现

在了解Scrapy爬虫原理及框架的基础上,本节简要介绍Scrapy爬虫框架的数据采集过程。

4.1 建立爬虫项目文件

基于scrapy爬虫框架,只需在命令行中输入“scrapy startproject article”命令,之后一个名为article的爬虫项目将自动创建。首先进入到article文件夹下,输入命令“cd article”,之后通过“dir”查看目录,也可以通过“tree /f”生成文件目录的树形结构,如下图所示,可以很清晰的看到Scrapy创建命令生成的文件。

浅谈Scrapy网络爬虫框架的工作原理和数据采集

顶层的article文件夹是项目名,第二层中包含的是一个与项目名同名的文件夹article和一个文件scrapy.cfg,这个与项目同名的文件夹article是一个模块,所有的项目代码都在这个模块内添加,而scrapy.cfg文件是整个Scrapy项目的配置文件。第三层中有5个文件和一个文件夹,其中__init__.py是个空文件,作用是将其上级目录变成一个模块;items.py是定义储对象的文件,决定爬取哪些项目;middlewares.py文件是中间件,一般不用进行修改,主要负责相关组件之间的请求与响应;pipelines.py是管道文件,决定爬取后的数据如何进行处理和存储;settings.py是项目的设置文件,设置项目管道数据的处理方法、爬虫频率、表名等;spiders文件夹中放置的是爬虫主体文件(用于实现爬虫逻辑)和一个__init__.py空文件。

4.2 之后开始进行网页结构与数据分析、修改Items.py文件、编写hangyunSpider.py文件、修改pipelines.py文件、修改settings.py文件,这些步骤的具体操作后期会文章专门展开,在此不再赘述。

浅谈Scrapy网络爬虫框架的工作原理和数据采集

4.3 执行爬虫程序

修改上述四个文件之后,在Windows命令符窗口中输入cmd 命令进入到爬虫所在的路径,并执行“scrapy crawl article”命令,这样就可以运行爬虫程序了,最后保存数据到本地磁盘上。

5、 结束语

随着互联网信息的与日俱增,利用网络爬虫工具来获取所需信息必有用武之地。使用开源的Scrapy爬虫框架,不仅可以实现对web上信息的高效、准确、自动的获取,还利于研究人员对采集到的数据进行后续的挖掘分析。

Python 相关文章推荐
Python使用稀疏矩阵节省内存实例
Jun 27 Python
Python同时向控制台和文件输出日志logging的方法
May 26 Python
如何在Python中编写并发程序
Feb 27 Python
Python打包可执行文件的方法详解
Sep 19 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
5道关于python基础 while循环练习题
Nov 27 Python
Python实现E-Mail收集插件实例教程
Feb 06 #Python
使用TensorFlow实现二分类的方法示例
Feb 05 #Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 #Python
在Python 字典中一键对应多个值的实例
Feb 03 #Python
Django csrf 两种方法设置form的实例
Feb 03 #Python
解决django前后端分离csrf验证的问题
Feb 03 #Python
Python利用heapq实现一个优先级队列的方法
Feb 03 #Python
You might like
php页面消耗内存过大的处理办法
2013/03/18 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
PHP的引用详解
2015/02/22 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
JavaScript Prototype对象
2009/01/07 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
JavaScript 异步调用
2017/10/25 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python中类的属性和方法介绍
2018/11/27 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
房地产出纳岗位职责
2013/12/01 职场文书
作风建设演讲稿
2014/05/23 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
承诺函格式模板
2015/01/21 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
JavaScript继承的三种方法实例
2021/05/12 Javascript
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
Python 匹配文本并在其上一行追加文本
2022/05/11 Python