logo好方法网

一种基于Scrapy-Redis的分布式网络爬虫优化方法


技术摘要:
本发明涉及一种基于Scrapy‑Redis的分布式网络爬虫优化方法,包括以下方面:(1)去重过程优化:使用布隆过滤器代替指纹去重机制,在优化后的去重过程中,元素集合使用位数组形式表示;(2)空闲监测机制:设置一个空闲时间阈值作为分界条件,在接收到某节点的空闲信号之后  全部
背景技术:
随着计算机技术的蓬勃发展,网络信息数据量呈指数增长,如何高效获取数据成 为新的挑战。网络爬虫技术作为一种常见的数据抓取策略,一直被广泛应用于互联网领域 中,通过自动化形式的动态抓取,大大节省了用户获取数据的时间。如各类搜索引擎、各类 信息统计发布站点等,都以网络爬虫技术为核心进行功能的开发和拓展。 近年来,为了有效应对网络中更灵活的数据源和更庞大的数据量,国内外众多学 者为爬虫技术做出了突出贡献。一方面是探索更为简洁实用的通用型爬虫框架,如Scrapy 框架通过引擎、调度器、下载器、爬虫、管道以及中间件六大组件的交互使用,大大提高了爬 虫的灵活性,同时简化了繁琐的冗余代码编写。另一方面是研究大数据爬取时的性能问题, 如使用Redis内存型数据库提高爬虫运行效率以及使用分布式方案进行多节点同步抓取数 据等。
技术实现要素:
本发明基于Scrapy-Redis提出了一种分布式爬虫优化方法。在使用Scrapy框架并 引入Redis的前提下,为了有效降低内存占用率,在原有指纹去重机制的基础上,提出了一 种更高效的去重策略,为了有效减少资源损耗并对爬虫过程进行实时监测,提出了一种空 闲监测机制,为了有效防止在进行大量数据爬取时被目的服务器屏蔽,提出了一种动态请 求配置方案。技术方案如下: 一种基于Scrapy-Redis的分布式网络爬虫优化方法,包括以下方面: (1)去重过程优化 使用布隆过滤器代替指纹去重机制,在优化后的去重过程中,元素集合使用位数 组形式表示。当一个元素被加入集合时,通过K个散列函数将此元素映射成一个位数组中的 K个点,并将所有点置为1;在进行判别检索时,若所有点的值均为1,则被检元素大概率出现 在集合中;若所有点中存在0,则被检元素一定不在集合中。 (2)空闲监测机制 采用空闲监测机制,空闲监测机制使用Scrapy中的spider_idle信号来监测爬虫 的空闲状态,当爬虫进入空闲状态时,该信号被发送;爬虫空闲时的三种情形:一是Request 请求正在等待被下载;二是Request请求正在被调度;三是数据正在管道中被处理,为此三 类情形设置一个空闲时间阈值作为分界条件,在接收到某节点的空闲信号之后,若监听到 空闲时间小于等于空闲时间阈值,则节点继续工作;若监听到空闲时间大于空闲时间阈值, 则可以判定为该节点暂无待爬取任务,即可结束此节点进程。 (3)动态请求配置 当客户端频繁向目的服务器发送请求时,可能被服务器辨认为恶意程序进而限定 3 CN 111611463 A 说 明 书 2/3 页 客户端行为,通过配置动态请求解决此问题: 一是进行动态IP的配置:维护一个可长期运行的IP池以供使用,并在每次发起请 求时保证IP的随机性,为应对请求失败的情形,根据应用场景,配置接收到何种响应时尝试 再次请求,并配置尝试请求次数达到何值时视为爬虫失败;同时,保证动态IP与Scrapy中下 载中间件的关联性。 二是进行动态请求头的配置:按真实请求头规范编写一个请求头集合,用来模拟 各类浏览器发起请求的过程,禁用Scrapy下载中间件中的请求头设置。 本发明的有益效果如下: 1 .本发明对原去重方案进行了优化,在Redis中使用布隆过滤器对网络请求进行 过滤,利用布隆过滤器的位数组运算特性,大大提高了空间利用率,虽然存在一定的误判 率,但整体性能提升明显。 2.本发明设计并提出的空闲监测机制在分布式爬虫节点增多时,能主动判断节点 状态,及时对无待爬取任务的节点进行关闭,有效降低资源占用率。 3.本发明配置的动态请求在短时间重复请求同一服务器时,可自动切换请求IP和 请求头,提高数据爬取的成功率,保证爬虫长时间稳定运行。 附图说明 图1引入空闲监测机制的总体爬虫流程 图2优化去重过程以及配置动态请求后的单节点爬虫架构
下载此资料需消耗2积分,
分享到:
收藏