浅谈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脚本实现代码行数统计代码分享
Mar 10 Python
Python实现简单字典树的方法
Apr 29 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
Python中应该使用%还是format来格式化字符串
Sep 25 Python
python3+requests接口自动化session操作方法
Oct 13 Python
python 阶乘累加和的实例
Feb 01 Python
对python生成业务报表的实例详解
Feb 03 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
Python能做什么
Jun 02 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 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判断远程url是否有效的几种方法小结
2011/10/08 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
extJs 下拉框联动实现代码
2010/04/09 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
详解VUE 数组更新
2017/12/16 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
Python selenium 三种等待方式解读
2016/09/15 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
给护士表扬信
2014/01/19 职场文书
相亲大会策划方案
2014/06/05 职场文书
任命书范本大全
2014/06/06 职场文书
军人离婚协议书样本
2014/10/21 职场文书
武当山导游词
2015/02/03 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python