网络爬虫的制作方法

文档序号:6491900阅读:355来源:国知局
网络爬虫的制作方法
【专利摘要】本发明公开了一种网络爬虫,包括一内核以及一Ajax抓取配置,该内核以及该Ajax抓取配置均集成有htmlunit,该Ajax抓取配置用于指定一网页的地址以及该网页中的待抓取的数据,该内核用于驱动搜索引擎,并基于该Ajax抓取配置提取该待抓取的数据。本发明能够支持Ajax的执行方式抓取网页页面的数据,并且支持异步请求的技术,可以使用JavaScript向服务器提出请求并处理响应,而且不会阻塞用户。
【专利说明】网络爬虫
【技术领域】
[0001]本发明涉及一种网络爬虫,特别是涉及一种能够支持Ajax爬取并通过异步请求从网页中提取数据的网络爬虫。
【背景技术】
[0002]传统的网络爬虫能够实现非Ajax (—种创建交互式网页应用的网页开发技术)的爬取过程,即不需要模拟浏览器加载页面并且执行页面中的JavaScript (—种动态、弱类型、基于原型的语言,通过浏览器可以直接执行)脚本。而传统的网络爬虫虽然能够抓取网页中的数据,但是只能抓取同步请求的数据,并不能及时的对异步请求进行响应和处理,导致可能会阻塞用户。

【发明内容】

[0003]本发明要解决的技术问题是为了克服现有技术中传统的网络爬虫不能对异步请求进行响应和处理导致会阻塞用户的缺陷,提供一种能够支持Ajax爬取并通过异步请求从网页中提取数据的网络爬虫。
[0004]本发明是通过下述技术方案来解决上述技术问题的:
[0005]本发明提供了一种网络爬虫,其特点在于,其包括一内核以及一 Ajax抓取配置,该内核以及该Ajax抓取配置均集成有htmlunit (—种开源的java (—种可以撰写跨平台应用软件的面向对象的程序设计语言)页面分析工具),该Ajax抓取配置用于指定一网页的地址以及该网页中的待抓取的数据,该内核用于驱动搜索引擎,并基于该Ajax抓取配置提取该待抓取的数据。
[0006]与传统的网络爬虫相比,本发明的网络爬虫的内核及Ajax抓取配置都集成有htmlunit,并且支持直接用脚本语言使用htmlunit的功能。这样,该Ajax抓取配置在执行方式上就需要一个模拟的浏览器加载该网页的页面并且执行该网页需要执行的JavaScript脚本(其中包括异步请求),并且在加载完成之后,还支持通过该Ajax抓取配置来模拟用户操作,例如点击按钮、提交表单等,然后再根据元素路径提取该网页的页面中的元素所需要的值,例如内容、链接、图像识别结果等。
[0007]这样,通过XmlHttpRequest对象(Ajax的网页应用程序架构的一项关键功能,能够提供在不重新加载页面的情况下更新网页的功能)向服务器发送异步请求,从服务器获取数据,然后用JavaScript来操作DOM (文档对象模型)而更新页面,而JavaScript则可以及时向服务器提出异步请求和处理响应,而不会阻塞用户。
[0008]通过上述方式就能够以Ajax形式来抓取网页中的数据,这些数据主要是指商品信息,包括商品名称、价格、图片、库存状态、用户评论等内容。
[0009]较佳地,该Ajax抓取配置的root (根)节点下设置有Ajax节点,该内核还用于在读取该Ajax节点的内容后加载该网页的页面并执行包含有异步请求的JavaScript脚本以抓取该待抓取的数据。[0010]较佳地,该Ajax节点包括操作类元素和提取类元素,该操作类元素用于模拟用户的操作,该提取类元素用于指定该待抓取的数据。
[0011]其中,网络爬虫的实现都是基于一种树形结构的数据,该树形结构中的每一个节点都可以被当作是一棵子树的根节点,即root节点。而在传统的网络爬虫的抓取配置中,定义了两种方式进行数据的爬取,第一种是纯脚本的爬取方式,即如果在抓取配置的root节点下存在一个Custom节点(一种节点的名称)的话,网络爬虫将直接执行该Custom节点中的脚本内容,若该root节点下存在一个Getting节点(一种节点的名称),网络爬虫则按照抓取配置中的定义对该Getting节点进行解析执行。
[0012]而在本发明中,该root节点下还设置有Ajax节点,该内核在读取到该Ajax节点后就会以上述的Ajax抓取配置的执行方式来抓取该网页中的数据。其中的Ajax的初始化链接仍然由传输的参数url (网页地址)来决定,即调用htmlunit提供的接口加载文档以及Ajax请求的数据,知道服务器返回结束请求的标识。
[0013]而该Ajax节点具体包括操作类元素和提取类元素,这两类元素可以交叉存在,没有先后顺序,可以按照实际情况安排操作和提取的顺序。操作类元素包含用户常用的操作,例如点击按钮、提交表单等操作,而在操作某个元素之前,首先要定位这个元素,而定位元素的方法有两种,一种是通过Xpath (—种在XML (可扩展标记语言)文档中查找信息的语言),另一种是通过CSS (级联样式表)的Selector (选择符)属性,而这两种只需出现其中一种即可,并且上述的定位元素的方法都属于本领域的公知技术,在此就不再赘述。
[0014]较佳地,该网络爬虫还包括一安装包,该安装包用于负责该网络爬虫的更新和启动。
[0015]本发明的积极进步效果在于:本发明能够支持Ajax的执行方式抓取网页页面的数据,并且支持异步请求的技术,可以使用JavaScript向服务器提出请求并处理响应,而且不会阻塞用户。
【专利附图】

【附图说明】
[0016]图1为本发明的一较佳实施例的网络爬虫的结构图。
【具体实施方式】
[0017]下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。
[0018]如图1所示,本发明的网络爬虫包括一安装包1、一内核2以及一 Ajax抓取配置3。
[0019]该安装包I负责该网络爬虫的更新和启动,以及连接任务服务器的工作,该内核2以及该Ajax抓取配置3均集成有htmlunit,该Ajax抓取配置3能够指定一网页的地址以及该网页中的待抓取的数据,该内核2则能够驱动搜索引擎,并基于该Ajax抓取配置3提取该待抓取的数据。
[0020]与传统的网络爬虫相比,本发明的网络爬虫的内核2及Ajax抓取配置3都集成有htmlunit,并且支持直接用脚本语言使用htmlunit的功能。这样,该Ajax抓取配置3在执行方式上就需要一个模拟的浏览器加载该网页的页面并且执行该网页需要执行的JavaScript脚本(其中包括异步请求),并且在加载完成之后,还支持通过该Ajax抓取配置3来模拟用户操作,例如点击按钮、提交表单等,然后再根据元素路径提取该网页的页面中的元素所需要的值,例如内容、链接、图像识别结果等。
[0021]这样,通过XmlHttpRequest对象向服务器发送异步请求,从服务器获取数据,然后用JavaScript来操作DOM而更新页面,而JavaScript则可以及时向服务器提出异步请求和处理响应,而不会阻塞用户。
[0022]通过上述方式就能够以Ajax形式来抓取网页中的数据,这些数据主要是指商品信息,包括商品名称、价格、图片、库存状态、用户评论等内容。
[0023]该Ajax抓取配置3的root节点下设置有Ajax节点,该内核2还在读取该Ajax节点的内容后加载该网页的页面并执行包含有异步请求的JavaScript脚本以抓取该待抓取的数据。
[0024]其中,网络爬虫的实现都是基于一种树形结构的数据,该树形结构中的每一个节点都可以被当作是一棵子树的根节点,即root节点。而在传统的网络爬虫的抓取配置中,定义了两种方式进行数据的爬取,第一种是纯脚本的爬取方式,即如果在抓取配置的root节点下存在一个Custom节点的话,网络爬虫将直接执行该Custom节点中的脚本内容,若该root节点下存在一个Getting节点,网络爬虫则按照抓取配置中的定义对该Getting节点进行解析执行。
[0025]而在本发明中,该root节点下还设置有Ajax节点,该内核2在读取到该Ajax节点后就会以上述的Ajax抓取配置3的执行方式来抓取该网页中的数据。其中的Ajax的初始化链接仍然由传输的参数url来决定,即调用htmlunit提供的接口加载文档以及Ajax请求的数据,知道服务器返回结束请求的标识。
[0026]而该Ajax节点具体包括操作类元素和提取类元素,这两类元素可以交叉存在,没有先后顺序,可以按照实际情况安排操作和提取的顺序。操作类元素包含用户常用的操作,例如点击按钮、提交表单等操作,而在操作某个元素之前,首先要定位这个元素,而定位元素的方法有两种,一种是通过Xpath,另一种是通过CSS的Selector属性,而这两种只需出现其中一种即可,并且上述的定位元素的方法都属于本领域的公知技术,在此就不再赘述。
[0027]其中,操作类元素包含常用的操作,例如点击按钮、提交表单等等。在操作某个元素之前,首先要定位这个元素,而定位这个元素的方法有两种,一种是通过XPath,一种是通过CSS的Selector,分别对应于任意一个操作类元素的节点的path(路径)属性和selector属性,两者只需要出项一种即可,其中包括了以下的子元素:
[0028]单击元素:click,触发一个单击的事件,例如:〈click path=〃/div/a〃/>
[0029]双击元素:dbclick,触发一个双击的事件,例如:〈dbclickselector=〃#abc〃/>
[0030]右击元素:rclick,触发鼠标右键点击的事件,例如:〈rclickselector=〃#abc〃/>
[0031]鼠标移动:mouseMove,触发鼠标移动的事件,例如:<mouseMoveselector=〃#abc〃/>
[0032]鼠标进入:move0ver,触发鼠标进入的事件,例如:〈mouseOverselector=〃#abc〃/>
[0033]鼠标移出:move0ut,触发鼠标移出的事件,例如:〈mouseOutselector=〃#abc〃/>
[0034]输入:type,模拟键盘输入,例如填写表单:〈typeselector=〃#abc〃value=〃something〃/>
[0035]触发其它事件:fireEvent,触发元素的其它事件,包括:submit, reset, change,load, unload, focus, blur, keydown, keypress, input,keyup,beforeunload,propertychange, readystatechange, DOMContentLoaded (上述的触发兀素的事件都是本领域的技术人员根据需要能够自定义的,如reset表示重置,input表示输入等,本领域技术人员也都能够理解各个触发元素的事件所执行的操作)等,例如:〈fireEventselector=〃#abc〃type=〃submit〃/>
[0036]其它操作类型:其它不常见操作类型还可以根据实际情况来扩展,为了使得配置支持所有的操作类型,我们通过定义action节点来支持其它操作,例如:
[0037]〈action selector=//#abc//do=//element.click() ; V〉其中的属性 do 是基于获取到的页面元素的一系列操作(用JavaScript脚本进行方法调用)。
[0038]而提取类元素针对一个元素,我们定义多种需要提取的值,例如:[0039]〈extract selector=//#abc//elementIndex=//l//type=//text//name=//text/V>
[0040]可以提取ID (身份标识号码)为abc的元素所包含的文本内容,elementlndex表示取第几个元素,type的取值可以是:text, html, attribute,分别表示提取元素的包含内容、HTML (超文本标记语言)源代码和某个属性,如果是提取某个属性,则应说明要提取的属性的名称,例如:
[0041]〈extract selector=〃#abc〃type=〃attribute〃name=〃url〃attribute=〃href〃 />
[0042]特别的,如果元素是一个img (图片的格式)的话,type取值也可以为OCR (光学字符识别),爬虫将识别图片内容并返回识别结果。
[0043]在通过上述方法进行提取内容之后,还可以使用简单的方法对数据进行后处理,
例如:
[0044]
【权利要求】
1.一种网络爬虫,其特征在于,其包括一内核以及一 Ajax抓取配置,该内核以及该Ajax抓取配置均集成有htmlunit,该Ajax抓取配置用于指定一网页的地址以及该网页中的待抓取的数据,该内核用于驱动搜索引擎,并基于该Ajax抓取配置提取该待抓取的数据。
2.如权利要求1所述的网络爬虫,其特征在于,该Ajax抓取配置的root节点下设置有Ajax节点,该内核还用于在读取该Ajax节点的内容后加载该网页的页面并执行包含有异步请求的JavaScript脚本以抓取该待抓取的数据。
3.如权利要求2所述的网络爬虫,其特征在于,该Ajax节点包括操作类元素和提取类元素,该操作类元素用于模拟用户的操作,该提取类元素用于指定该待抓取的数据。
4.如权利要求1-3中任意一项所述的网络爬虫,其特征在于,该网络爬虫还包括一安装包,该安装包用于负责该网络爬虫的更新和启动。
【文档编号】G06F17/30GK103853717SQ201210495699
【公开日】2014年6月11日 申请日期:2012年11月28日 优先权日:2012年11月28日
【发明者】刘涛 申请人:纽海信息技术(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1