一种自动获取目标数据源的方法及系统与流程

文档序号:17131045发布日期:2019-03-16 01:13阅读:253来源:国知局
一种自动获取目标数据源的方法及系统与流程

本发明涉及数据采集技术领域,具体涉及一种自动获取目标数据源的方法及系统。



背景技术:

随着互联网技术的发展,现在已经进入到大数据时代。随着数据量的指数级增长,各个公司对于大数据研究和应用也越来越广泛,由于绝大多数数据的获取方式都是通过互联网,而互联网上的数据种类繁多,且又有结构化和非结构化的数据,给用户的采集和分析带来很多不便。

目前的数据采集方式均是通过网络数据爬虫将目标网站的数据全部爬取下来保存,然后再进行相应的数据清理等处理工作得到感兴趣的数据并保存以备用。这种方法是最简便的,但是带来的问题是数据量巨大占用空间,而且由于不同类型的数据都存储在一起,给后续的处理工作也带来很多不便。



技术实现要素:

有鉴于此,本发明提供一种自动获取目标数据源的方法,其特征在于,包括如下步骤:对网页数据进行解析;对解析后的数据进行结构化或半结构化形成可分析数据;基于解析后获得的可用于分析的数据进行数据分析以确定是否需要获得该网页数据;利用数据采集器获取数据源网页数据并将获取的网页数据保存在关系型数据库或者文件中。

优选地,通过htmlunit进行数据的解析形成字串格式。

优选地,可以采用另一种方法进行数据解析,即利用htmlparser将html页面中的标签按树形结构解析成一个一个结点,一种类型的结点对应一个类,通过调用其方法访问标签中的内容。该方法包括:从页面中提取出子链接以及解析网页内容;其中提取页面子链接的步骤为:用被提取的网页的url实例化一个parser;实例化filter,设置页面过滤条件;用parser提取页面中所有通过filter的结点,得到nodelist;遍历nodelist,调用node的相应方法得到其中的链接,加入子链接的集合;返回子链接集合;其中解析网页内容的步骤为:读取html文件,获得页面编码;用页面编码实例化html文件的parser;对需要提取的结点设置相应的filter;根据给定的filter,用parser解析html文件;提取结点中的文本内容。

进一步地,所述的数据分析方法为关键词分析、或相似文本分析等。

进一步,所述的解析和结构化半结构化过程在设定的缓存中进行。

根据本发明的另一方面,还提供一种自动获取目标数据源的系统,其特征在于,包括:数据解析模块,用于对目标网页数据进行解析;数据处理模块,用于将解析后的数据进行结构化或半结构化处理;数据分析模块,用于对经过数据处理模块处理后的结构化或半结构化数据进行分析,以确定是否为需要采集的数据;数据采集器,用于对需要采集的数据进行采集并存储。

优选地,采用封装的htmlunit执行目标网页的数据解析。

进一步地,还可以利用htmlparser执行目标网页的数据解析。

从上述技术方案可以看出,本发明提供的数据自动采集方法及系统,不同于传统的先爬取数据再进行分析的方法,而是先对数据进行解析,获得可分析的数据,对数据进行分析后只爬取那些需要爬取的目标数据。这样可以为后续的处理带来很大的方便,而且不会加重工作量,是对现有的数据采集方法的优化。

附图说明

为了更清楚地说明本发明实施方式的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明实施例提供的自动获取目标数据源的方法的流程图。

图2是本发明实施例提供的自动获取目标数据源的系统结构示意图。

图3是本发明实施例提供的htmlunit执行js的过程。

具体实施方式

为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。因此,以下对在附图中提供的本发明的实施方式的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。

如图1所示,本发明实施例提供一种自动获取目标数据源的方法,包括:对网页数据进行解析;对解析后的数据进行结构化或半结构化形成可分析数据;基于解析后获得的可用于分析的数据进行数据分析以确定是否需要获得该网页数据;利用数据采集器获取数据源网页数据并将获取的网页数据保存在关系型数据库或者文件中。

s101,对网页数据进行解析;网页数据一般为html格式或xml格式,在数据采集之前,首先对目标网页的数据进行解析,解析的方法可以采用htmlunit,它相当于一个没有界面的浏览器,可以进行浏览器操作,它采用了httpclient和java自带的网络api结合来实现;它将一个网页封装成了一个对象,不仅保存了这个网页对象,还存有这个网页的所有基本操作甚至事件。htmlunit执行js时,会将整个页面下载下来,而很多时候,我们执行js,只是因为需要执行后生成url,不必要的频繁页面下载不但会增加程序运行时长,也会加重网络负载,此时可以采用生成一个伪response,而不是去真正获取页面的response,用来构造所有的新页面。具体实现办法为:如果当前线程是第一次执行该下载方法,就不对代码做修改,让其生成一个真正的response,然后,将该response对象保存起来,待该线程后续再执行js进入该方法,不再生成response对象,而是将之前保存起来的response拿出来直接使用,并修改对应的url为执行js之后生成的url即可。js执行完成之后,返回scriptresult对应的url,就是执行js之后生成的url,但如果以这个url去拿页面的源码的话,会得到“错误”的数据,这是因为每次都用了同一个response,而不是url页面对应的url。但这么做的初衷是为了得到正确的url,而不去download整个页面,所以这种”错误“不会影响程序的运行及后面的结果。

另一种可选的方案是,解析过程采用htmlparser包,它提供方便、简洁的处理html文件的方法,将html页面中的标签按树形结构解析成一个一个结点,一种类型的结点对应一个类,通过调用其方法可以轻松地访问标签中的内容;采用hemlparser包的处理主要包括从页面中提取出子链接和解析网页内容;

其中提取页面子链接的步骤为:用被提取的网页的url实例化一个parser;实例化filter,设置页面过滤条件;用parser提取页面中所有通过filter的结点,得到nodelist;遍历nodelist,调用node的相应方法得到其中的链接,加入子链接的集合;返回子链接集合;

其中解析网页内容的步骤为:读取html文件,获得页面编码;用页面编码实例化html文件的parser;对需要提取的结点设置相应的filter;根据给定的filter,用parser解析html文件;提取结点中的文本内容。

s102,对解析后的数据进行结构化或半结构化形成可分析数据;采用htmlunit解析后的数据大多为非结构化的数据,需要对这些数据进行进一步处理变成可分析的结构化或半结构化数据,以便为后续确定需要获取的目标页面比较分析提供可分析文档。

s103,基于解析后获得的可用于分析的数据进行数据分析以确定是否需要获得该网页数据;在通过步骤s102获得可用于分析的数据之后,采用文档相似性计算的方法对目标文档进行分析,确定该文档是否与当前需要的主题相关或近似。

计算文档相似性可以采用基于向量空间模型的相似度计算方法,它一般包括如下三个步骤:1,特征项的提取与选择;2,对象的表达;3,选用合适的计算模型进行计算。在本专利中,可以采用nlp领域常用的文档相似性计算模型进行分析以确定结果。例如:余弦相似性、简单共有词、海明距离等等。

s104,利用数据采集器获取数据源网页数据并将获取的网页数据保存在关系型数据库或者文件中。在这一步中,将满足获取要求的网页数据通过网络爬虫的方式进行爬取,由于网页数据为动态加载,通过htmlunit动态加载渲染得到网页数据之后进行解析,并通过数据分析确定爬取目标数据,此时可以采用jsoup爬虫获取整个页面的dom对象,通过这个对象来获取所需要的页面所有的参数。对于获得的有用数据,直接保存在关系型数据库或者文件中,以备后续使用。

综上所述,在上述实施例中,本发明提供的自动获取目标数据源的方法通过在下载之前对数据的处理,可以直接获得需要的结果,从而无需在爬取大量的网页数据之后再来进行处理。通过这样的方法,一是可以准确获取目标动态网页的所有数据;二是虽然在爬取网页数据之前有额外的工作量,但是所有步骤均是在缓存中进行,并不会造成性能的大幅降低。这种方法相较于传统的网络数据爬取办法,具有较高的操作性,也是对现有方法的一大改进。

如图2所示,本发明实施例提供一种自动获取目标数据源的系统,包括:数据解析模块201;数据处理模块202;数据分析模块203;数据采集器204。

数据解析模块201,用于对目标网页数据进行解析;

数据处理模块202,用于将解析后的数据进行结构化或半结构化处理;

数据分析模块203,用于对经过数据处理模块处理后的结构化或半结构化数据进行分析,以确定是否为需要采集的数据;

数据采集器204,用于对需要采集的数据进行采集并存储。

综上所述,在上述实施例中,本发明提供的自动获取目标数据源的系统通过数据解析模块、数据处理模块和数据分析模块,在目标网页被爬取下载之前对是否为用户所需的数据进行分析处理判断,最后的数据采集仅采集用户感兴趣的目标网页数据,而对不感兴趣的数据进行排除,这样能够大大减少后续的处理步骤,提高数据自动获取效率。

图3所示为htmlunit执行js的过程。从图3可以看出htmlunit执行js时,会将整个页面下载下来,而本专利中执行js,只需要执行后后生成url,不必要的频繁页面下载不但会增加程序运行时长,也会加重网络负载。本发明采用的是生成一个伪response,而不是去真正获取页面的response,用来构造所有的新网页。得到一个页面的response,然后根据该response生成一个loadjob对象,放入loadqueue_队列,后续从队列中取出该loadjob对象,完成生成新页面并加载至浏览器的工作。具体方法为:如果当前线程是第一次执行该下载方法,就不对htmlunit代码做修改,让其生成一个真正的response,然后,将该response对象保存起来,待该线程后续再执行js进入该方法,不再生成response对象,而是将之前保存起来的response取出直接使用,并修改对应的url为执行js之后生成的url即可,js执行完成之后,返回scriptresult对应的url,即执行js之后生成的url,但如果去取页面的源码的话,会得到”错误“的数据,这是因为每次都用了同一个response,而不是url页面对应的url。因为这么做的目的是得到正确的url,而不去下载整个页面,所以这种”错误“不会影响程序和结果。

以上所述仅为本发明的优选实施方式而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1