动态网页抓取( 基于python(asynchronousjavascriptandxml)的动态网页爬虫系统及其开发方法)

优采云 发布时间: 2022-01-17 17:03

  动态网页抓取(

基于python(asynchronousjavascriptandxml)的动态网页爬虫系统及其开发方法)

  

  本发明属于计算机领域,涉及爬虫系统,尤其是一种动态网页爬虫系统。

  背景技术

  网络爬虫是一种自动提取网页的程序。传统爬虫从一个或多个初始网页的url开始,获取初始网页上的url(统一资源定位器),在抓取网页的过程中不断从当前页面中提取。新的url被放入队列中,直到满足系统预设的停止条件。

  随着互联网从web1.0时代迅速进入web1.0时代,基于ajax(异步javascript和xml)的动态页面加载技术成为各大公司的首选。随着移动互联网的兴起,javascript在移动端和pc端的优秀特性被广泛挖掘,基于前端mvc/mvm的模型逐渐进入各大互联网公司的首选方案。动态网页的迅速崛起使得基于动态网页的网络爬虫越来越重要。

  例如,一个 网站? courseid=id#/学习/视频?课程ID=课程ID&c。通常,对于动态url对应的动态页面,后面跟问号、等号等字符的参数就是要查询的数据库数据。获取动态页面的数据,一般是通过脚本解析或者使用浏览器渲染动态网页来获取动态网页内容。但是,脚本解析的前提是要确定异步加载信息中存在部分或全部目标动态网页信息,并且请求规则可以是获取和目标页面有规律的分布;使用浏览器渲染只能针对不完整的DOM(文档对象模型)数据结构,而部分或全部的目标信息存在于使用浏览器渲染中。

  技术实施要素:

  为了解决脚本解析和浏览器渲染的局限性,提高动态网页爬取的准确性和完整性,本发明提供了一种基于scrapy的方法(scrapy是一种基于python开发的快速、高级的屏幕爬取和网页) .爬虫框架)动态网络爬虫系统,包括爬虫引擎、调度器、解析模块、项目管道、下载器,爬虫引擎用于处理数据流和触发事务;

  调度器用于接收爬虫引擎或解析模块发送的请求,将请求推入队列调度下载器下载,当爬虫引擎再次请求时返回;

  解析模块用于构造或解析动态网页的异步加载信息,分析从下载器中提取的网页中的数据元素;

  项目管道用于处理解析器从网页中提取的数据或响应爬虫引擎的请求;

  下载器,用于响应调度器的任务请求,下载网页内容,并将网页内容返回给解析器;

  解析模块包括脚本解析器、渲染器和切换模块;

  脚本解析器通过网络抓包工具搜索查询动态信息的文件类型,根据动态信息的文件类型对动态信息文件的结构进行建模,构造动态网页的请求规则,解析动态网页中的所有文件。并将动态网页的内容提取出来,交给项目管道;如果解析失败,则交由切换模块处理;

  渲染器通过加载动态网页的异步加载信息,构建完整的动态网页dom树,并通过模拟操作解析出动态网页中服务器返回的异步加载内容,直到动态网页内容完整提取。交给切换模块交给脚本解析器处理;

  切换模块检测脚本解析器或渲染器解析动态网页所花费的时间以及解析的内容是否完整,如果所需时间超过阈值或内容不完整则切换。

  作为本发明的一个优选方案,渲染器为无界面浏览器。

  作为本发明的一个优选方案,无界面浏览器包括selenium、splash、htmlunit、phantomjs。在本发明的一个实施例中,无界面浏览器使用闪屏渲染容器来渲染动态网页。

  为了避免使用动态解析或浏览器渲染来提取动态网页的盲目性,在本发明的一个实施例中,解析模块还包括预解析模块,从url库中随机抽取样本。然后交给脚本解析器或渲染器进行爬取,记录爬取信息的完整性、爬取时间、资源消耗。

  本发明第二方面的目的在于提供一种动态网页提取方法,包括以下步骤:

  s1:获取url库,对url库进行聚类分析,如果有聚类,进行步骤s2,如果没有聚类,结束;

  s2:从集群中抽取至少一个随机样本url;

  s3:使用脚本解析、渲染,或者脚本解析和渲染相结合的方式爬取url;

  s4:记录爬取信息的完整性、爬取时间、资源消耗等信息,通过优先级算法选择最优爬虫方案,使用最优方案爬取集群内所有动态网页;

  s5:处理爬取信息,执行步骤s1。

  作为本发明的一个优选方案,所述脚本解析还包括:

  根据动态网页或URL信息生成请求规则,通过服务器验证获取访问权限,根据请求规则获取异步加载信息。

  进一步地,通过服务器的验证包括cookie认证、用户认证、301认证、302认证、图文认证、ip认证。

  作为本发明的一个优选方案,所述渲染包括:使用无界面浏览器渲染异步加载的信息,使用无界面浏览器的api模拟用户点击,从模拟事件的结果中提取目标信息.

  作为本发明的一个优选方案,脚本解析和渲染混合的具体步骤如下:通过脚本解析获取动态网页的请求规则,然后通过非界面浏览器加载,利用脚本解析缺失的渲染参数构造完整的请求规则,直到获得完整的异步加载信息。

  作为本发明的优选方案,s4中的优先级算法如下:以提取的动态页面提取信息的完整性、时间、资源消耗率为变量,采用单纯形法得到最优解。

  本发明的有益效果是:

  1.本发明对目前大部分动态网页网站的结构和常规动态网页的爬取方法进行分析,利用资源消耗低和脚本解析速度快的优点,将webdriver在渲染爬虫的优势,可以提高爬虫的爬取精度和适应性。

  2.设置切换模块,避免使用单一爬取方式时,因特殊情况导致无法爬取,陷入死循环的情况。

  3.通过预检测机制,对收录不同动态异步加载机制的动态网页采用不同的爬取策略,提高了解析性能,减少了对内存和网络资源的占用,使得本发明对动态页面的爬取更具自适应性和智能性。

  图纸说明

  图1为本发明的基本原理图;

  图2为本发明的解析模块框架*敏*感*词*;

  图3是本发明的动态爬取方法的流程图;

  图4是本发明采用脚本解析动态网页的流程图;

  图5是本发明中采用脚本通过服务器认证结构分析动态网页的组成;

  如图。图6是本发明中脚本解析和渲染的流程图。

  详细说明

  为更好地理解本发明所提出的技术方案,下面结合附图1-6和具体实施例对本发明作进一步的说明。

  如图1和图2所示,动态网络爬虫系统包括爬虫引擎、调度器、解析模块、项目管道和下载器。

  爬虫引擎用于处理数据流和触发事务;

  调度器用于接收爬虫引擎或解析模块发送的请求,将请求推入队列调度下载器下载,当爬虫引擎再次请求时返回;

  解析模块用于构造或解析动态网页的异步加载信息,分析从下载器中提取的网页中的数据元素;

  项目管道用于处理解析器从网页中提取的数据或响应爬虫引擎的请求;

  下载器用于响应调度器的任务请求,下载网页内容,并将网页内容返回给解析器;解析模块包括脚本解析器、渲染器和切换模块,

  脚本解析器通过网络抓包工具搜索查询动态信息的文件类型,根据动态信息的文件类型对动态信息文件的结构进行建模,构造动态网页的请求规则,解析动态网页中的所有文件。并将动态网页的内容提取出来,交给项目管道;如果解析失败,则交由切换模块处理;

  渲染器通过加载动态网页的异步加载信息,构建完整的动态网页dom树,并通过模拟操作解析出动态网页中服务器返回的异步加载内容,直到动态网页内容完整提取。交给切换模块交给脚本解析器处理;

  切换模块检测脚本解析器或渲染器解析动态网页所花费的时间以及解析的内容是否完整,如果所需时间超过阈值或内容不完整则切换。

  在本发明的一个实施例中,切换阈值时间选择为150ms,即当脚本解析或渲染器解析动态页面超过150ms仍无法返回时,切换器切换未解析的url使用的方法。

  在本发明的另一个实施例中,考虑到现有爬虫系统可以是分布式架构,可以优化解析时间和资源消耗,因此切换器的切换条件考虑解析出的动态页面的信息是否完整。

  在本发明的一个实施例中,渲染器为无界面浏览器,常见的无界面浏览器有benv、browser、launcher、browserjet、casperjs、dalekjsghostbuster、headlessbrowser、htmlunit、jasmine-headless-webkit、jaunt、jbrowserdriver、jedi-爬虫,乐天,噩梦,phantomjs,硒,slimerjs,triflejs,zombie.js。

  进一步地,在本发明实施例中,无界面浏览器包括selenium、splash、htmlunit、phantomjs。

  进一步地,在本发明的一个实施例中,使用selenium与webdriver或hantomjs相结合的方法进行动态页面提取。

  为了避免使用浏览器进行动态解析或渲染的盲目性,在本发明的一个实施例中,解析模块还包括预解析模块,从url库中随机抽取样本,然后提交给脚本解析器或渲染器爬取并记录爬取信息的完整性、爬取时间和资源消耗。

  如图4至图6所示,本发明还提供了一种基于上述动态网页爬虫系统的动态网页提取方法,包括以下步骤:

  s1:获取url库,对url库进行聚类分析,如果有聚类,进行步骤s2,如果没有聚类,结束;

  s2:从集群中抽取至少一个随机样本url;

  s3:使用脚本解析、渲染,或者脚本解析和渲染相结合的方式爬取url;

  s4:记录爬取信息的完整性、爬取时间、资源消耗等信息,通过优先级算法选择最优爬虫方案,使用最优方案爬取集群内所有动态网页;

  s5:处理爬取信息,执行步骤s1。

  作为本发明的一个优选方案,所述脚本解析还包括:根据动态网页或网站信息生成请求规则,通过服务器验证获取访问权限,根据请求规则获取异步加载信息。进一步地,通过服务器的验证包括cookie认证、用户认证、301认证、302认证、图文认证、ip认证。

  基于以上描述的公开和教导,本发明所属领域的技术人员还可以对上述实施例的相关模块和软件架构进行适应性改变和修改。因此,本发明不限于上述所公开和描述的具体实施例,对本发明的一些修改和变化也应落入本发明权利要求的保护范围之内。此外,虽然在本说明书中使用了一些特定的术语,但这些术语只是为了描述的方便,并不构成对本发明的任何限制。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线