当前位置: 首页 > 专利查询>南京大学专利>正文

一种流式爬虫实现方法及系统技术方案

技术编号:29790159 阅读:18 留言:0更新日期:2021-08-24 18:09
本发明专利技术公开一种流式爬虫实现方法及系统,包括以下内容:初始请求数据流的构建配置爬虫数据流转换图的构建流程;通过层次树模型对网站结构与数据对象模型的映射关系,利用对象模型构建请求数据流,并对请求数据流配置来绕过网站反爬策略;实现爬虫组件对数据流进行转化操作,构建爬虫数据流转换图,从请求数据流到下载页面数据流,再到结果数据流。本发明专利技术采取响应式编程的思想,通过构建整个爬虫的数据流转换图,生成基于响应式编程的异步流式爬取模型,将数据爬取过程中的阻塞操作通过异步来进行处理,相比较与传统爬虫方案,提高了开发效率、系统吞吐量和资源利用率,有很高的应用价值。

【技术实现步骤摘要】
一种流式爬虫实现方法及系统
本专利技术涉及一种流式爬虫实现方法及系统,属于网络爬虫

技术介绍
随着网络数据的爆炸性增长,各个领域的人们对个性化数据的搜索的需求也随之增长,如何获取网络中有用的信息成为了各个领域的重要任务。对于网络数据的大规模获取,我们往往通过爬虫技术对网页进行爬取,并针对与特定页面的网页结构进行各自的解析,最后得到所需要的结构化或者半结构化数据。爬虫通用的爬取方式,便是从一个初始的URL集合出发,下载URL对应的页面;并对页面内容进行解析,提取出相应的页面元素,以及页面上的链接,提取出来的页面元素便是所需要的数据;然后对页面链接进行过滤操作,获取所需要追踪的链接,将提取出的新链接放到任务队列中去;最后直到队列中没有新的链接,爬虫便会结束。传统爬虫通常采用多线程同步模式进行爬取,每一个URL请求都对应一个线程进行处理,该线程负责页面的下载、解析、链接过滤等操作。在下载阶段,会进行相应的网络IO操作,需要从网站获取响应页面,此时请求线程必须同步等待以获得响应。对于请求量不大的爬虫来说,多线程模型是可以接受的。但在负载大的情况下,该模式会消耗大量的内存,因为每个爬虫请求都要维护一个线程堆栈。持续的上下文切换也会导致大量的CPU时间损失,无法充分利用CPU资源。现实世界中,爬虫除了由于大量网络IO造成CPU利用率低的问题之外,还存在各种问题,如登录验证、异常处理、数据定制化解析以及爬虫配置切换等。这些问题使得爬虫开发效率以及爬取数据的效率和质量大打折扣。而目前的爬虫框架鲜有考虑到爬虫开发以及爬虫运行效率的问题。
技术实现思路
专利技术目的:针对现有技术中存在的问题与不足,本专利技术提供一种基于响应式编程的流式爬虫实现方法及系统,提高爬虫开发效率、爬取效率以及系统资源利用率。本专利技术通过分析待爬取网页数据结构,对数据对象进行建模,构建数据对象属性与页面元素之间的映射关系,同时定义URL追踪方式。然后对爬虫各个组件进行定义,构建爬虫处理流程图,执行爬虫获得响应式数据流。基于响应式数据流,对结构化数据进行过滤、筛选和数据持久化操作。技术方案:一种基于响应式编程的流式爬虫实现方法,包括如下步骤:(1)初始请求数据流的构建与配置为爬虫的爬取定义数据对象模型,数据对象模型通过注解描述网站层次结构以及页面映射关系,依据数据对象模型构建初始请求数据流,并配置请求数据流来绕过网站反爬策略。(2)爬虫数据流转换图的构建流程通过响应式编程模型来构建爬虫数据流转换图,爬虫爬取的过程便是数据流转换的过程,从请求数据流到下载页面数据流,再到结果数据流;实现爬虫组件对数据流进行转化操作。所述的请求数据流的构建与配置,包括以下流程:步骤1,对象模型构建:根据层次模型对网站结构映射,基于注解模式生成对象模型。步骤2,请求数据流生成:根据对象模型构造请求数据流,通过解析对象模型的注解来生成请求数据流。步骤3,请求数据流配置:配置请求数据流,为每个请求数据流配置不同的代理IP,UserAgent以及Cookies,来绕过网站的反爬策略。所述的对象模型构建:根据层次树结构模版对网站结构进行映射,根节点表示主页面,中间内部节点表示列表页或者是导航页面,叶子节点表示目标页。使用注解描述网站的层次结构,描述了网站爬取的起始页面,爬取过程中的中间页面,以及需要解析的结果页面。并且通过注解描述目标页面的元素定位,使得对象模型属性与页面元素一一对应。所述的请求数据流的生成:解析对象模型定义的相关注解,将起始种子URL封装成HTTP请求,构建起始请求数据流。然后提取出表示中间页面以及目标页面的注解中定义的正则表达式,匹配爬虫需要跟进的中间导航页面链接以及目标页面链接,封装成HTTP请求,导入到请求数据流中。所述的请求数据流的配置:通过数据流组合的方式对爬虫进行配置,通过外部IP代理池构建代理IP数据流,将请求数据流以及代理IP流之间的数据重组,生成配置后的新数据流。UserAgent以及Cookies也是通过数据流间的重组生成新的数据流来对请求数据流进行配置。所述的爬虫数据流转换图的构建流程中,所述的响应式编程模型通过非阻塞的方式实现各个爬虫组件,爬虫组件间的数据传递均通过异步消息通信,使用隔离的工作线程池对下载器组件的阻塞代码进行异步处理,不会阻塞主流程的数据转换,而将非阻塞的爬虫代码运行在固定线程池中。所述的爬虫数据流转换图的构建流程中,所述的爬虫组件包括:初始化组件、下载器组件、链接提取组件、对象映射组件以及中间过程中的数据处理组件等等。根据组件之间的数据依赖关系来编排爬虫组件之间的相互顺序,并且提供组件异常处理机制,最后构建爬虫数据流转换图。所述的爬虫数据流转换图的构建流程中,所述的数据流包括请求数据流、下载页面数据流以及最后的结构化的对象数据流。下载页面数据流由请求数据流通过下载器组件转换后得到,对象数据流则是下载页面数据流通过链接提取组件以及对象映射组件转换得到。数据流符合响应式规范,结果数据流通过响应式关系型数据库连接(ReactiveRelationalDatabaseConnectivity)进行异步持久化存储。所述的组件异常处理机制:异常处理通过hook模式来监听各个组件的运行状况,当数据流途经某个组件有异常事件抛出时,会截获该异常并加以处理。异常信息会封装成消息信号向下游传播,若下游没有定义异常处理,那么整个爬取流程将会终止。一种基于响应式编程的流式爬虫系统,包括:(1)初始请求数据流的构建与配置模块为爬虫的爬取定义数据对象模型,数据对象模型通过注解描述网站层次结构以及页面映射关系,依据数据对象模型构建初始请求数据流,并配置请求数据流来绕过网站反爬策略。(2)爬虫数据流转换图的构建流程模块通过响应式编程模型来构建爬虫数据流转换图,爬虫爬取的过程便是数据流转换的过程,从请求数据流到下载页面数据流,再到结果数据流;实现爬虫组件对数据流进行转化操作。所述的请求数据流的构建与配置模块,包括:对象模型构建单元:根据层次模型对网站结构映射,基于注解模式生成对象模型。请求数据流生成单元:根据对象模型构造请求数据流,通过解析对象模型的注解来生成请求数据流。请求数据流配置单元:配置请求数据流,为每个请求数据流配置不同的代理IP,UserAgent以及Cookies,来绕过网站的反爬策略。有益效果:与现有技术相比,本专利技术提出的基于响应式的流式爬虫方法及系统,利用响应式编程模型,使得爬虫各个组件能够异步运行在不同的线程中,用更少的线程处理更高的负载。同时通过数据流配置模式可以很方便地处理对爬虫进行代理配置以及配置切换等问题。本专利技术相较于传统爬虫框架具有资源利用率高、爬取效率快以及爬虫开发简便等优点,可以应用于垂直细分领域的爬虫实现。附图说明图1为本专利技术方法的方案流程图;图2为响应式爬虫编程模型图;图3为本文档来自技高网
...

【技术保护点】
1.一种基于响应式编程的流式爬虫实现方法,其特征在于,包括如下步骤:/n(1)初始请求数据流的构建与配置/n为爬虫的爬取定义数据对象模型,数据对象模型通过注解描述网站层次结构以及页面映射关系,依据数据对象模型构建请求数据流,并配置请求数据流来绕过网站反爬策略;/n(2)爬虫数据流转换图的构建流程/n通过响应式编程模型来构建爬虫数据流转换图,爬虫爬取的过程便是数据流转换的过程,从请求数据流到下载页面数据流,再到结果数据流;实现爬虫组件对数据流进行转化操作。/n

【技术特征摘要】
1.一种基于响应式编程的流式爬虫实现方法,其特征在于,包括如下步骤:
(1)初始请求数据流的构建与配置
为爬虫的爬取定义数据对象模型,数据对象模型通过注解描述网站层次结构以及页面映射关系,依据数据对象模型构建请求数据流,并配置请求数据流来绕过网站反爬策略;
(2)爬虫数据流转换图的构建流程
通过响应式编程模型来构建爬虫数据流转换图,爬虫爬取的过程便是数据流转换的过程,从请求数据流到下载页面数据流,再到结果数据流;实现爬虫组件对数据流进行转化操作。


2.根据权利要求1所述的基于响应式编程的流式爬虫实现方法,其特征在于,所述的请求数据流的构建与配置,包括以下流程:
步骤1,对象模型构建:根据层次模型对网站结构映射,基于注解模式生成对象模型;
步骤2,请求数据流生成:根据对象模型构造请求数据流,通过解析对象模型的注解来生成请求数据流;
步骤3,请求数据流配置:配置请求数据流,为每个请求数据流配置不同的代理IP,UserAgent以及Cookies,来绕过网站的反爬策略。


3.根据权利要求2所述的基于响应式编程的流式爬虫实现方法,其特征在于,所述的对象模型构建:根据层次树结构模版对网站结构进行映射,根节点表示主页面,中间内部节点表示列表页或者是导航页面,叶子节点表示目标页;使用注解描述网站的层次结构,描述了网站爬取的起始页面,爬取过程中的中间页面,以及需要解析的结果页面;
并且通过注解描述目标页面的元素定位,使得对象模型属性与页面元素一一对应。


4.根据权利要求2所述的基于响应式编程的流式爬虫实现方法,其特征在于,所述的请求数据流的生成:解析对象模型定义的相关注解,将起始种子URL封装成HTTP请求,构建起始请求数据流;然后提取出表示中间页面以及目标页面的注解中定义的正则表达式,匹配爬虫需要跟进的中间导航页面链接以及目标页面链接,封装成HTTP请求,导入到请求数据流中。


5.根据权利要求2所述的基于响应式编程的流式爬虫实现方法,其特征在于,所述的请求数据流的配置:通过数据流组合的方式对爬虫进行配置,通过外部IP代理池构建代理IP数据流,将请求数据流以及代理IP流之间的数据重组,生成配置后的新数据流;UserA...

【专利技术属性】
技术研发人员:曹春马晓星何城贤徐经纬
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1