目录
大数据概念:
1.数据采集过程中会采集哪些类型的数据?
2.非结构化数据采集的特点是什么?
3.请阐述传统的数据采集与大数据采集的区别?
4.大数据采集的数据源有哪些?针对不同的数据源,我们可以采用哪些不同的方法和工具?
数据预处理:
1、我们在进行数据清洗的时候,要重点处理哪些数据?数据清洗的基本流程是什么?
2、假设我们有一组数值型数据如下:[10, 12, 15, 18, 20, 22, 25, 28, 30, 32, 35],请使用等高和等宽分箱的方式对数据进行平滑处理
3、王涛作为银行的数据管理员,负责管理大量客户的金融数据,包括个人信息、账户余额和交易记录等敏感数据。他深知金融数据的安全性至关重要,并希望采取措施保护这些敏感数据。
网络数据采集:
1、什么是网络爬虫?结合流程图,一般的网络爬虫的基本步骤有哪些?网络爬虫有哪几种类型?
2、小明是一名热爱数据分析的学生,他正在学习网络数据采集。他计划从一个目标网站上获取一些数据用于研究,但这个网站采取了一些反爬机制来保护数据的安全和隐私。请列举一下小明可能会遇到的一些反扒手段,并且针对不同的手段,小明可以如何有有效应对?
3、Scrapy体系架构包括哪几个组成部分?每个组成部分的功能是什么?
4、Scrapy工作流的主要步骤有哪些?
大数据概念:
1.数据采集过程中会采集哪些类型的数据?
(1)结构化:结构化数据、非结构化数据、半结构化数据
(2)加工程度:裸数据、专家数据、信息和价值
(3)抽象程度:可分为数据(元)、元数据、数据对象
2.非结构化数据采集的特点是什么?
含义:不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层,数据的结构和内容混在一起,没有明显的区分,因此,它也被称为自描述的结构。
本质:难以发现同一的结构
特点:
(1)多样性:非结构化数据包括文本、图像、音频、视频等多种形式,涵盖了大量的信息内容和表达方式。这些数据来源广泛,包括社交媒体、新闻网站、传感器等,具有多样性和丰富性。
(2)复杂性:非结构化数据通常没有明确的格式和组织,不易于直接进行处理和分析。数据中可能存在大量的噪声、冗余和不一致性,需要通过数据清洗和预处理等步骤来提取有用的信息。
(3)高维度:非结构化数据通常具有高维度的特点,包含大量的变量和属性。例如,一张图片可能包含成千上万个像素点,一个文本文件可能包含数千个单词。这些高维度的数据需要采用适当的技术和算法进行降维和分析。
(4)实时性:非结构化数据的采集通常是实时进行的,例如社交媒体上的实时评论、传感器数据的实时监测等。这要求采集系统具备高效的处理能力和实时的数据传输能力。
(5)隐私性:非结构化数据中可能包含大量的个人隐私信息,例如社交媒体上的用户账号、位置信息等。在采集和处理非结构化数据时,需要遵守相关的隐私保护法规和规范,确保数据的安全性和合规性。
3.请阐述传统的数据采集与大数据采集的区别?
(1)传统数据采集:数据来源单一,数据量相对较少;结构单一;存储方式为关系型数据库和并行数据仓库
(2)大数据采集:数据来源广泛,数据量巨大;数据类型丰富,包括结构化、非结构化、半结构化数据;存储方式是分布式数据库,分布式文件系统
4.大数据采集的数据源有哪些?针对不同的数据源,我们可以采用哪些不同的方法和工具?
(1)传感器数据:通过摄像头等传感器,图片、视频等附件的采集
(2)互联网数据:网络爬虫
(3)日志文件:日志采集系统
(4)企业业务系统数据:ETL 工具
数据预处理:
1、我们在进行数据清洗的时候,要重点处理哪些数据?数据清洗的基本流程是什么?
(1)在进行数据清洗时,重点处理以下几类数据:
- 缺失值:处理数据中的缺失值,可以通过填充缺失值、删除缺失值所在的行或列,或者使用模型预测填充等方法来处理。
- 异常值:识别和处理数据中的异常值,可以通过统计方法、可视化分析或使用模型来检测和处理异常值。
- 重复值:识别和处理数据中的重复值,可以通过对数据集进行排序、使用重复值检测函数或者模型来处理重复值。
- 格式错误:处理数据中的格式错误,例如数据类型错误、日期格式错误等。
- 不一致的数据:处理数据中不一致的数据,例如名字的大小写不一致、单位的不统一等。
(2)数据清洗的基本流程如下:
- 数据导入:将原始数据导入到数据清洗的环境中。
- 观察和初步分析:对数据进行观察和初步分析,包括查看数据的结构、大小、缺失值等情况。
- 处理缺失值:识别并处理数据中的缺失值。
- 处理异常值:识别并处理数据中的异常值。
- 处理重复值:识别并处理数据中的重复值。
- 处理格式错误:处理数据中的格式错误。
- 处理不一致的数据:处理数据中的不一致的数据。
- 数据导出:将清洗后的数据导出,供后续分析使用。
数据清洗基本流程:
(1)数据分析。原始数据源中存在数据质量问题,需要通过人工检测或计算机分析程序对原始数据源的数据进行检测分析。可以说,数据分析是数据清洗的前提和基础。
(2)定义数据清洗的策略和规则。根据数据分析步骤得到的数据源中的“脏数据”的具体情况,制定相应的数据清洗策略和规则,并选择合适的数据清洗算法。
(3)搜寻并确定错误实例。搜寻并确定错误实例步骤包括自动检测属性错误和用算法检测重复记录。手工检测数据集中的属性错误要花费大量的时间和精力,而且容易出错,所以需要使用高效的方法自动检测数据集中的属性错误,主要检测方法有基于统计的方法、聚类方法和关联规则方法等。检测重复记录的算法可以对两个数据集或一个合并后的数据集进行检测,从而确定同一个实体的重复记录。检测重复记录的算法有基本的字段匹配算法、递归字段匹配算法等。
(4)纠正发现的错误。根据不同的“脏数据”存在形式,执行相应的数据清洗和转换解决原始数据源中存在的质量问题。在某些特定领域,我们能够根据发现的错误模式,编制程序或借助于外部标准数据源文件、数据字典等,在一定程度上修正错误。有时候也可以相据数理统计知识进行自动修正,但是很多情况下都需要编制复杂的程序或借助于人工干预来完成修正。需要注意的是,对原始数据源进行数据清洗时,应该将原始数据源备份,以防需要撤销清洗操作。
(5)干净数据回流。在数据被清洗后,干净的数据替代原始数据源中的“脏数据”这样可以提高信息系统的数据质量,还可以避免将来再次抽取数据后进行重复的清洗工作。
2、假设我们有一组数值型数据如下:[10, 12, 15, 18, 20, 22, 25, 28, 30, 32, 35],请使用等高和等宽分箱的方式对数据进行平滑处理
- 等高分箱的特点是什么?一般用什么值替换箱子内的所有元素?请给出等高分箱的结果。
- 等高分箱的特点是将数据按照相同数量的元素划分到每个箱子中,使得每个箱子内的元素数目相等或接近相等。或者说将数据分成数量相等的若干个箱子,每个箱子内包含的数据量不同。
- 一般使用箱子内的中位数、平均值或众数替换箱子内的所有元素。
- 对于给定的数据集,等高分箱的结果如下:
分成4个箱子,每个箱子内包含3个数据,将箱子内的数据用箱子内数据的中位数代替,根据这种方法,数据可以被分成如下4个箱子:
箱子1: [10, 12, 15]
箱子2: [18, 20, 22]
箱子3: [25, 28, 30]
箱子4: [32, 35]
按箱的平均值平滑结果:{12.3,12.3,12.3,20,20,20,27.7,27.7,27.7,33.5,33.5}
按箱的中值平滑结果:{12,12,12,20,20,20,28,28,28,33.5}
按箱的边界平滑结果:{10,10,15,18,18,22,28,28,30,32,35}
2.等宽分箱的特点是什么?一般用什么值替换箱子内的所有元素?请给出等宽分箱的结果。
- 等宽分箱的特点是将数据按照相同的数值区间划分到每个箱子中,使得每个箱子内元素的取值范围相等或接近相等。或者说将数据分为具有相同数据范围的若干个箱子,每个箱子内包含的数据个数不同。
- 一般使用箱子内的中位数、平均值或众数替换箱子内的所有元素。
- 对于给定的数据集,等宽分箱的结果如下:
设置每个箱子的范围为5,将数据分配到各个箱子中,将箱子内的数据用箱子内数据的平均值代替,根据这种方法,数据可以被分成如下6个箱子:
箱子1: [10, 12]
箱子2: [15, 18]
箱子3: [20, 22]
箱子4: [25, 28]
箱子5: [30, 32]
箱子6: [35]
箱子内的数据平均值分别为:[11, 16.5, 21, 26.5, 31, 35]
- 在哪些情况下我们更偏向使用等高分箱?在哪些情况下使用等宽分箱更好?
- 更偏向使用等高分箱的情况:当数据中存在较大的离群值时,等高分箱可以在每个箱子内保持相同数量的离群值,避免对离群值进行额外处理。另外,等高分箱对于高度偏斜的数据分布也比较适用,可以保持每个箱子内的元素分布相对均衡。
等高分箱更适用于数据量较小、且数据分布不连续、存在异常值的情况。因为等高分箱可以保证每个箱子内包含相同数量的数据,从而能够更好地保留数据的局部特征和稀有特征,避免过拟合。
- 使用等宽分箱更好的情况:当数据分布较为均匀,没有明显的离群值时,等宽分箱可以保持每个箱子内的取值范围相同。此外,等宽分箱对于需要保持数据的绝对大小差异的场景也比较适用,如对于某些机器学习算法,可能需要对数据进行归一化处理。
等宽分箱更适用于数据量较大、数据分布连续且可预测的情况。因为等宽分箱将数据按照相同的范围进行划分,可以将数据的差异最小化,并且在某些情况下可能更容易解释。但是等宽分箱容易受到异常值的影响,并且可能导致一些少见的特征被忽略。
3、王涛作为银行的数据管理员,负责管理大量客户的金融数据,包括个人信息、账户余额和交易记录等敏感数据。他深知金融数据的安全性至关重要,并希望采取措施保护这些敏感数据。
- 请问在进行数据脱敏的过程中,他应该遵循哪些原则?
最小化原则:只脱敏必要的数据,尽量保留数据的可用性。
数据一致性原则:确保脱敏后的数据与原始数据在逻辑上保持一致。
不可逆原则:脱敏后的数据不可逆转回原始数据。
安全性原则:确保脱敏后的数据仍能防止未经授权的访问。
答:①保持原有数据特征。数据脱敏前后数据特征应保持不变,例如,身份证号码由十七位教字本体码和一位校验码组成,分别为区域地址码 (6 位)、出生日期(8 位)、顺序码(3位)和校验码(1位),那么身份证号码的脱敏规则需要保证脱敏后这些特征信息不变。
②保持数据的一致性。在不同业务中,数据之间有一定的关联。例如,出生年月或年龄和出生日期有关联。身份证信息脱敏后需要保证出生年月字段和身份证号码中包含的出生日期的一致性。
③保持业务规则的关联性。保持数据业务规则的关联性是指数据脱敏时数据关联性及业务语义等保持不变,其中数据关联性包括主外键关联性、关联字段的业务语义关联性等。特别是高度敏感的账户类主体数据,往往会贯穿主体的所有关系和行为信息,因此需要特别注意保证所有相关主体数据的关联性。
④多次脱敏的数据一致性。相同的数据进行多次脱敏,或者在不同的测试系统中进行脱敏需要确保每次脱敏后的数据一致。只有这样才能保障业务系统数据变更的持续一致性以及广义业务的持续一致性。
2.对于敏感的客户的姓名、电话号码和地址等敏感信息,王涛将客户的姓名进行部分脱敏,只显示姓氏的首字母和星号,以隐藏客户的真实身份;电话号码中的数字进行随机替换,以模糊化真实号码。在这些操作中,他用到了哪些数据脱敏方法?
- 姓名部分脱敏:只显示姓氏的首字母和星号,可以采用掩码法对数据进行脱敏。例如,将“张三”脱敏成“张*”。
- 电话号码数字替换:可以采用伪随机数法对电话号码的数字进行替换,以模糊化真实号码。例如,将"13812345678"脱敏为"138****5678"。
①姓名部分脱敏法:只显示姓氏的首字母和星号,以隐藏客户的真实身份;
②电话号码随机替换法:把客户电话号码中的数字进行随机替换,以模糊化真实号码。
3.王涛还可以采用哪些数据脱敏的方法提升金融数据的安全?请为每种方法举一个简单的例子。
- 数据加密:对敏感数据进行加密,确保只有授权的用户能够解密访问。例如,可以使用AES、DES等对称加密算法或RSA、DSA等非对称加密算法。
- 数据分区:将不同级别的数据存储在不同的分区中,根据用户权限设置不同的访问控制策略。例如将客户的个人信息和交易记录分别存储在不同的数据库表中,并根据员工的职责设置访问权限。
- 数据脱敏规则:制定明确的数据脱敏规则,并对所有敏感数据进行统一处理。将数据进行分区,只有授权的人员才能够查看和操作特定区域的数据。例如对于出生日期的敏感字段,脱敏为年龄范围,如"20-30岁"。
- 聚合和采样:将数据进行聚合或者采样处理,使得敏感数据的细节难以被推测出来。例如将客户的交易记录进行按月聚合,只显示每月的交易总额。
- 生成脱敏数据对照表:对于部分不可逆的脱敏方法,可以生成一个数据对照表,保存原始数据和脱敏后的数据的对应关系,以便需要时还原数据。例如,对于哈希脱敏方法,可以保存哈希值和原始值之间的对应关系。
- 匿名化:将敏感数据中的个人身份信息替换为唯一的标识符。例如,将客户的姓名替换为一个随机生成的字符串
①数据替换:用设置的定虚构值换真值。例如,将手机号码统一换为 13900010002。
②无效化: 通过对数据值的截断、加密、隐等使敏感数据脱敏,使其不再具有利用价值。例如,将地址的值替换为“******”。无效化与数据替换所达成的效果类似。
③偏移和取整:通过随机移位改变数值型数据。例如,把日期“2018-01-02 8:12:25”变为“2018-01-02 8:00:00”。偏移和取整在保持数据的安全性的同时,保证了范围的大致真实,这在大数据环境中具有重大价值。
④灵活编码:在需要特殊脱敏规则时,可执行灵活编码以满足各种脱敏规则。例如,用固定字母和固定位数的数字替代合同编号真值。
网络数据采集:
1、什么是网络爬虫?结合流程图,一般的网络爬虫的基本步骤有哪些?网络爬虫有哪几种类型?
- 网络爬虫是一种自动化程序,用于在互联网上抓取网页数据,以供后续分析和处理。
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成部分。
- 一般的网络爬虫的基本步骤包括:
- 确定目标:确定需要采集的网站、数据内容和数据结构,确定采集频率和数据存储方式。
- 发送HTTP请求:爬虫程序通过发送HTTP请求来获取目标网页的内容。可以使用Python中的第三方库如requests、Scrapy等进行请求和响应操作。
- 解析HTML:爬虫程序将获取到的HTML代码进行解析,提取出所需的数据。可以使用Python中的BeatifulSoup、lxml等解析HTML的库来实现。
- 执行JavaScript:对于动态网页,需要执行JavaScript脚本,获取动态生成的数据。可以使用Python中的Selenium等自动化测试工具来模拟真实浏览器环境,执行JavaScript脚本并获取数据。
- 存储数据:爬虫程序将解析得到的数据存储到本地文件或者数据库中
基本步骤:
把目标种子URL加入到待抓取的URL队列(发送HTTP请求到目标网站,请求网页的内容)然后读取URL,DNS解析并网页下载内容,同时把URL放入已爬取的URL中,最后进行网页解析后进行有效信息的存储。在访问已爬取过的URL时直接提取出URL并加入到待爬取的队列。
- 网络爬虫有几种类型,包括:
- 通用网络爬虫:用于抓取整个互联网上的网页数据。爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。
- 聚焦网络爬虫:根据特定的主题或者领域,抓取相关网站的数据。选择性地爬行那些与预先定义好的主题相关页面的网络爬虫
- 增量式网络爬虫:定期抓取更新的网页数据,以获取最新信息。对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。
- 深层网络爬虫:用于采集深层次的链接和数据。深层网络是那些大部分内容不能通过静态链接获取的、隐藏在搜索界面后的,只有用户提交一些关键词才能获得的 Web 页面。
类型:
①通用网络爬虫(全网爬虫)
原理:爬行对象从一些种子 URL 扩充到整个 Web,该架构主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。
结构:分为页面爬行模块 、页面分析模块、链接过滤模块、页面数据库、URL 队列、初始URL集合。
爬行策略:深度优先策略和广度优先策略
②聚焦网络爬虫(主题网络爬虫)
原理:是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫。
结构:分为页面爬行模块 、页面分析模块、链接过滤模块、页面数据库、URL 队列、初始 URL 集合、链接评价模块以及内容评价模块几个部分。
爬行策略:基于内容评价的爬行策略、基于链接结构评价的爬行策略 、基于增强学习的爬行策略、基于语境图的爬行策略。
③增量式网络爬虫(核心:去重)
原理:是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。
结构:包含爬行模块、排序模块、更新模块、本地页面集、待爬行 URL 集以及本地页面URL 集。
爬行策略:统一更新法、个体更新法、基于分类的更新法;广度优先策略、PageRank 优先策略等(提高本地页面集中页面的质量)。
④深层网络爬虫
原理:深层网络是那些大部分内容不能通过静态链接获取的、隐藏在搜索界面后的,只有用户提交一些关键词才能获得的 Web 页面。
结构:包含六个基本功能模块 (爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS 控制器)和两个爬虫内部数据结构( URL 列表、LVS 表)。
爬行策略:Deep Web 爬虫爬行过程中最重要部分就是表单填写,包含两种类型:基于领域知识的表单填写、基于网页结构分析的表单填写
2、小明是一名热爱数据分析的学生,他正在学习网络数据采集。他计划从一个目标网站上获取一些数据用于研究,但这个网站采取了一些反爬机制来保护数据的安全和隐私。请列举一下小明可能会遇到的一些反扒手段,并且针对不同的手段,小明可以如何有有效应对?
例如:小明尝试用自己的爬虫程序直接发送请求,但他发现网站返回了一个错误页面,并且在错误提示中提到了User-Agent。小明意识到网站通过检查User-Agent标头来识别爬虫请求。
应对:修改爬虫程序,设置一个合理的User-Agent标头,以模拟真实用户的请求。
小明可能会遇到以下一些反扒手段:
(1)User-Agent检测:小明尝试用自己的爬虫程序直接发送请求,但他发现网站返回了一个错误页面,并且在错误提示中提到了User-Agent。小明意识到网站通过检查User-Agent标头来识别爬虫请求。
应对:修改爬虫程序,设置一个合理的User-Agent标头,以模拟真实用户的请求。
(2)IP封禁:网站可能会根据IP地址来封锁访问频率过高或异常的IP地址。小明发现自己无法在网站上正常访问,怀疑自己的IP地址被网站屏蔽了。
应对:使用代理服务器。通过使用代理服务器来隐藏自己的真实IP地址,以避免IP限制。或者使用IP池来切换IP地址,以避免被封禁。可以通过购买专业的代理服务或者使用免费的代理网站来获取可用的代理IP。
(3)Cookie验证:网站可能会通过Cookie来验证用户的身份和访问权限。
应对:小明可以通过分析网站的Cookie生成规则,手动设置Cookie或者使用Cookie池来模拟真实用户的身份。
(4)验证码:网站设置验证码,要求用户输入正确的验证码才能继续访问。小明在爬取过程中遇到了验证码,需要手动输入才能继续访问网站。
应对:破解验证码:通过使用第三方库或者在线验证码识别平台来自动解析识别和输入验证码,可以通过调用API接口将验证码图片上传并获取识别结果,然后将识别结果自动填入验证码输入框。或者使用人工手动输入验证码。
(5)登录限制:小明发现部分页面需要登录才能访问,无法直接通过爬虫程序获取数据。
应对:使用模拟登录的方式,通过模拟真实用户的登录行为,包括发送POST请求携带用户名和密码进行登录操作。可以使用第三方库如Selenium来模拟浏览器行为进行登录。
(6)动态页面JavaScript渲染:网站可能会使用JavaScript动态加载数据或者进行页面渲染,而传统的爬虫程序无法执行JavaScript代码。小明发现网站的数据是通过JavaScript动态加载的,无法直接从HTML源码中获取到所需数据。
应对:使用无头浏览器,或者前端渲染技术。使用无头浏览器(Headless Browser)模拟真实用户的行为,可以解析动态页面并获取数据。例如使用Selenium + Chrome Headless等工具来模拟真实浏览器环境,让JavaScript得到执行并获取动态加载的数据(获取渲染后的页面数据)。
(7)请求频率限制:网站可能会对访问频率进行限制,例如设置每分钟或每小时只能访问一定次数。小明在短时间内发送大量请求,发现网站返回了错误或者拒绝访问。
应对:合理控制请求频率,可以通过设置延时或者随机延时来模拟人工访问的行为。通过设置访问间隔时间,或者使用分布式爬虫来分散访问压力,以避免被限制。另外,可以使用分布式爬虫技术,将请求分散到多个IP上,减少单个IP的请求频率。
(8)数据接口加密:网站可能会对数据接口进行加密或者进行访问权限限制。
应对:小明可以通过分析接口加密算法或者模拟登录获取访问权限,以获取加密的数据接口。
(9)数据混淆:网站可能会对数据进行混淆或者加密,使得爬虫无法直接解析和获取。
应对:小明可以通过分析数据混淆算法或者使用反混淆技术来还原数据。
(10)动态URL:网站可能会使用动态URL来生成页面,使得每次请求的URL都不同。
应对:小明可以通过分析URL生成规则,构造正确的URL来获取数据。
(11)模拟行为检测:网站可能通过分析用户的行为模式来检测是否是爬虫,例如检查鼠标移动、点击等行为。
应对:使用Selenium等工具模拟真实用户的行为,包括鼠标移动、点击等操作,以避免被检测为爬虫。
(12)Referer检测:网站可能通过检查请求头中的Referer来判断请求来源。
应对:在爬虫程序中设置合理的Referer,以模拟真实用户的请求来源。
3、Scrapy体系架构包括哪几个组成部分?每个组成部分的功能是什么?
1)Spider(爬虫):用于定义如何爬取特定网站(包括URL的生成和如何跟踪链接),以及如何从爬取的页面中提取数据。从特定的网页中提取自己需要的信息,负责解析响应并生成提取结果和新的请求。
2)Item(数据项):用于定义爬取的数据结构,类似于数据库表的结构。
3)Pipeline(管道):用于处理爬取到的数据,包括数据的清洗、去重、存储等操作。
4)Downloader(下载器):负责下载网页并将其转换为Scrapy能够处理的Response对象。用于下载网页内容,并将网页内容返回给爬虫
5)Scheduler(调度器):负责处理爬虫请求的调度顺序,确保请求按照合理的顺序发送给下载器。用来接受 Scrapy 引擎发过来的请求,压入队列中,并在引擎再次请求的时候提供给引擎。同时去除重复的网址
6)Downloader Middleware(下载器中间件):用于修改Scrapy的默认下载行为,如设置代理、修改请求头等。
7)Spider Middleware(爬虫中间件):用于修改Scrapy的默认爬虫行为,如修改请求、处理异常等
8)Engine:处理整个系统的数据流,触发事务,是整个爬虫的调度中心
9)Item Pipeline:负责处理由爬虫从网页中抽取的实体,主要任务是持久化实体、验证实体的有效性、清除不需要的信息
- Scrapy引擎(Engine)。Scrapy引擎相当于一个中枢站,负责调度器、项目管道、下载器和爬虫四个组件之间的通信。例如,将接收到的爬虫发来的 URL 发送给调度器,将爬虫的存储请求发送给项目管道。调度器发送的请求会被 Scrapy引擎提交到下载器进行处理,而下载器处理完成后会发送响应给 Scrapy引擎,Scrapy 引擎将其发送至爬虫进行处理。
- 爬虫( Spiders)。爬虫相当于一个解析器,负责接收 Srapy 引擎发送过来的响应,对其进行解析,开发人员可以在其内部编写解析规则。解析好后可以发送存储请求给 Scrapy 引擎。爬虫解析出的新的 URL后,可以向 Scrapy 引擎发送。注意,入口 URL 也存储在爬虫中。
- 下载器(Downloader)。下载器用于下载搜索引擎发送的所有请求,并将网页内容返回爬虫。下载器建立在 Twisted 这个高效的异步模型之上。
- 调度器(Scheduler)。调度器可以理解成一个队列,存储 Scrapy 引擎发送过来的 URL并按顺序取出URL发送给 Scrapy引擎进行请求操作。
- 项目管道(Item Pipeline)。项目管道是保存数据用的,它负责处理爬虫获取的项目,并进行处理,包括去重、持久化存储(如存数据库或写入文件)等。
- 下载器中间件(Downloader Middlewares)。下载器中间件是位于 Scrapy引擎和下载器间的框架,主要用于处理 Scrapy引擎与下载器之间的请求及响应,类似于自定义扩展下载功能的组件。
- 爬虫中间件(Spider Middlewares )。爬虫中间件是介于 Scrapy 引擎和爬虫之间的框架主要工作是处理爬虫的响应输入和请求输出。
- 调度器中间件(Scheduler Middlewares )。调度器中间件是介于 Scrapy 引擎和调度器之间的中间件,用于处理从 Scrapy引擎发送到调度器的请求和响应,可以自定义扩展和操作搜索引警与爬虫中间“通信”的功能组件(如进入爬虫的请求和从爬虫出去的请求 )。
4、Scrapy工作流的主要步骤有哪些?
- 创建一个Scrapy项目:使用命令行工具创建一个新的Scrapy项目,其中包含了项目的结构和配置文件。
- 定义Item:定义要提取的数据结构,即定义一个Item类,用于存储从网页中提取的数据。
- 编写Spider:编写Spider来定义如何爬取特定网页(包括URL的生成和如何从爬取的页面中提取数据)、如何提取数据和如何跟进链接。Spider是Scrapy的核心部分,通过编写Spider来控制爬虫的行为。
- 配置Item Pipeline:定义Item Pipeline来处理从Spider中提取的Item对象。编写管道来处理爬取到的数据,包括数据的清洗、去重、存储、验证和持久化等操作。
- 配置Downloader Middleware(可选):根据需要修改Scrapy的默认下载行为,如设置代理、修改请求头等。
- 配置Spider Middleware(可选):根据需要修改Scrapy的默认爬虫行为,如修改请求、处理异常等。
- 配置和启动爬虫:配置Scrapy的全局设置和启动爬虫。可以设置一些参数,如请求头、延时、并发数等。使用命令行工具启动爬虫,开始从指定的网站爬取数据
- 处理爬取到的数据:Scrapy会自动发送请求和处理响应,并将提取的数据存储到定义的Item对象中,发送给管道进行处理,根据管道的配置进行数据的清洗、去重、存储等操作。可以编写相应的代码来处理爬取结果,如保存到数据库、写入文件等。
- 跟进链接和深度优先搜索:Spider会根据定义的规则跟进链接,继续爬取下一页或者其他相关页面。Scrapy使用深度优先搜索算法来控制爬取的顺序。
- 异步处理和并发控制:Scrapy支持异步处理和并发控制,可以通过设置参数来控制同时发送请求的数量,以提高爬取效率。
- 日志和错误处理:Scrapy提供了丰富的日志功能和错误处理机制,方便调试和监控爬虫运行状态。
- 停止爬虫:爬取完成或者手动停止爬虫。
①Scrapy 引擎从调度器中取出一个 URL 用于接下来的抓取。
②Scrapy 引擎把 URL 封装成一个请求并传给下载器。
③下载器把资源下载下来,并封装成应答包。
④爬虫解析应答包。
⑤如果解析出的是项目,则交给项目管道进行进一步的处理。
⑥如果解析出的是 URL,则把 URL 交给调度器等待抓取。