浅谈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 fileinput模块使用实例
Jun 03 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
Python基于locals返回作用域字典
Oct 17 Python
Python中glob库实现文件名的匹配
Jun 18 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
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
node.js中的fs.open方法使用说明
2014/12/17 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
Python使用爬虫猜密码
2016/02/19 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
python psutil模块使用方法解析
2019/08/01 Python
python字符串格式化方式解析
2019/10/19 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
社会实践自我鉴定
2013/11/07 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
党内外群众意见范文
2015/06/02 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
小学运动会入场词
2015/07/18 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
5道关于python基础 while循环练习题
2021/11/27 Python