兼容双向自动化网页内容采集方法与流程

文档序号:11707659阅读:332来源:国知局
本发明涉及计算机网页内容采集
技术领域
,具体涉及一种兼容双向自动化网页内容采集方法。
背景技术
:随着互联网技术的发展,网络数据以爆炸式的速度增长,如何从海量的数据中获取对自己有意义数据已经成为每个企业和公司关注的重点,这个就“信息中的信息”,目前网页内容采集主要有两种方式,第一种方式:基于网络爬虫的网页信息采集,这种方式的主要优势就是能通过链接不断的获取新的链接上的网页内容,通过网页抓取、网页数据抽取、内容分析等步骤,发现和找到有意义的数据,但是对不同领域、不同背景的用户往往具有不同的检索目的和需求,这种方式搜索采集到的结果包含大量用户不关心的网页,造成了大量的资源浪费;第二种方式,现在越来越多的企业和用户更多的关注自己垂直领域内的信息收集,因为这种信息的意义相比网络爬虫获取的信息更有价值,为了直接获取更有用的数据和减少数据处理步骤,他们开始只针对网页上的数据表格进行解析,从而直接把有效的数据收集到自己的数据库中,但是目前越来越多的网站为了提高整体网站的性能和用户的体验效果,采用的数据获取方式都从原来的整体网页刷新到局部数据表格的刷新,而通过传统工具,如jsoup,webparser,htmlparser都只能做到对网页整体内容的解析,对于这种局部交互的网页内容获取就显得爱莫能助了。技术实现要素:本发明克服了现有技术的不足,提供一种兼容双向自动化网页内容采集方法。为解决上述的技术问题,本发明采用以下技术方案:一种兼容双向自动化网页内容采集方法,它包括以下步骤:步骤1,配置网页信息采集任务,在配置网页信息采集任务时定义四个关键要素,定义任务采集的入口地址和信息采集的分页策略,定义采集信息在htmldom树的位置,定义采集内容的数据映射表;定义任务采集的入口地址和信息采集的分页策略,例如,电影天堂网站的入口地址为http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html,该网站采用全部网页刷新的方式,定义该任务采集的链接为http://www.ygdy8.net/html/gndy/dyzz/list_23_{page}.html,采用的方式为page,例如,http://data.10jqka.com.cn/market/xsjj/,定义采用的方式为ajax,分页执行的方法为changepage({page})。定义采集内容的数据映射表,因为收集的数据最后统一到数据库中都是标准数据库,所以需要把网页上不规则的数据字段映射成标准数据字段,如内容块的<td>标签或者<div>标签,需要定义总共的number和第几个<td>或者<div>的字段映射关系,如<td>1对应日期,<td>2对应标题,具体见下表:内容序号配置字段说明1time第一个td对应数据库中的时间字段2title第二个td对应数据库中的标题字段3content第三个td对应数据库中的内容字段4actor第四个td对应数据库中的导演字段5other第五个td对应数据库中的其他信息字段7pic第六个td对应数据库中的图片地址字段,过滤到第6个人字段步骤2,解析网页数据,通过jsoup打开任务采集的入口地址,开始解析该网页内容,通过配置的数据块位置,让jsoup获取该位置下的所有内容,并参照数据映射表中的映射关系一一解析网页内容中的数据字段,当该入口地址的信息解析完成后,开始查找该网页采集任务的分页策略,如果分页策略为page,采集链接中的{page}参数替换为真实的页数,再通过jsoup获取下一页的网页内容;如果分页策略为ajax,通过javawebclient执行配置中的ajax脚本,把ajax的{page}参数替换为真实的页数,再通过jsoup获取下一页的网页内容;步骤3,采集信息的入库处理,通过jsoup把采集到的标准数据存入数据库。由于现有技术中第二种方式,网页内容提取的方式主要通过现有工具把整个网页内容全部获取下来,在通过解析网页内容dom树获取我们希望获取的网页内容,如:www.baidu.com,我们想获取百度下面广告图片的具体名字,我们会通过工具,如jsoup打开www.baidu.com,获取返回的htmldom树,再找到网页广告部分的网页位置,对这部分数据进行解析,获取广告内容名字,这种方式存在两个较大的问题,问题一:在获取网页内容的过程中,需要人工参与和分析的工作比较多,如,广告内容部分在网页htmldom树中位置,还有就是在该位置下,那个div或者td的内容属于广告名字那个是广告的链接;问题二:百度广告位的内容采用的是分页的形式,在浏览器上用户可以通过点击左箭头和右箭头获取上一页和下一页的广告内容,通过局部刷新网页的dom树呈现新的内容,这种方式也是目前越来越多的网站展现数据的方式了,如果我们再通过现有的工具,就不能实现上一页和下一页广告内容的获取,所以本技术方案中通过配置生成定时任务工作,去解析需要采集信息的网站,在定时任务中,会知道该网站内容获取方式,是传统的全部网页刷新实现还是局部网页刷新实现。如果是全部网页刷新,通过jsoup直接获获取全部网页内容,然后从定时工作配置信息中找到数据块的位置和找到工作中关于数据块字段的映射属性,如第一个<div>或者<td>映射成广告链接,第二个<div>或者<td>映射成广告名称,完成数据的解析;如果是局部网页刷新,需要从定时任务配置信息中获取局部网页刷新数据需要执行的ajax方法,通过实现javawebclient调用ajax方法进行到网页局部内容刷新,再重复jsoup获取网页内容的工作,最后完成数据的解析。与现有技术相比,本发明的有益效果是:本发明通过配置,自动的识别网页上的有效数据块,自动发现数据块的内容是通过全部网页刷新方式获取还是通过ajax做局部数据刷新,如果是通过网页全部刷新,就按照一般的传统模式进行网页内容的采集,如果是通过ajax局部数据刷新,就通过客户端自动执行该ajax脚本,刷新数据后再提取有效的数据,从而达到数据全部采集的目的。附图说明图1为本发明一种实施例的兼容双向自动化网页内容采集方法的流程图。具体实施方式下面结合附图对本发明作进一步阐述。实施例1步骤1,通过web工程定义网页信息采集任务,定义classcollecttask(收集任务),包含字段stringentrenceurl(入口地址),enumcontentflag(获得内容块的方式,xpath,class或者id),stringcontentlocation(内容块数据位置,可以为xpath或者唯一标示class和id),enumpagestrategy(分页策略,page还是ajax),stringpageurl(分页执行的链接或者ajax调用的方法);定义:listclasstaskitem(收集内容字段定义,一个任务包含了多个收集的内容字段),stringitemflag(对应网页中的元素,如td或者div),stringnumber(网页内容总共有多少个内容项),map<string,string>items(每个内容项对应的我们数据库中的字段),如items.put(“1”,“title”),items.put(“2,“content”);步骤2,通过springschedulertrigger触发网页信息收集任务,本实施例采用的每日凌晨1点执行一次001**?,配置文件如下:步骤3,网页信息采集任务执行;通过jsoup打开collecttask信息中的入口地址connectionconnect=jsoup.connect(url);documentdocument=connect.get();通过jsoup定位到内容数据模块elementstrs=tbody.getelementsbytag("id_flag");elementstrs=tbody.getelementsbyclass("class_flag");通过映射文件,解析数据块的内容,获取数据执行ajax脚本进行分页数据加载webclientwc=newwebclient();wc.getoptions().setjavascriptenabled(true);//启用js解释器,默认为truewc.getoptions().setcssenabled(false);//禁用css支持htmlpagepage=wc.getpage(url);page.executejavascript("changepage(‘2’)");步骤4,把解析到的梳理存取到数据库中,通过web系统进行浏览和统计。以上具体实施方式对本发明的实质进行详细说明,但并不能对本发明的保护范围进行限制,显而易见地,在本发明的启示下,本
技术领域
普通技术人员还可以进行许多改进和修饰,需要注意的是,这些改进和修饰都落在本发明的权利要求保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1