背景技术
社交媒体相比传统的媒体有一个非常大的区别,就是人与人之间的社会关系被映射到网络上,并且可以通过社交平台提供的各类应用开发接口获取到用户的部分或全部数据。基于应用开发接口(API,Application Programming Interface),第三方开发者们除了开发各种各样丰富的社交功能的应用程序之外,还可以方便地获取社交平台上的各种数据,其中,包括社交平台用户的个人信息、微博内容、用户之间的关系信息等等,通过这些数据对社会学、市场营销、网络分析以及计算语言学等诸多领域有直接的帮助和影响。比如对社会学来说,传统研究社交网络的方法主要是由学者个人或团队来构造,耗时耗力,成本高,通过社交平台等社交网络和开放接口,就可以很容易构造几百万、几千万甚至上亿用户之间的关系网络,基于此网络可进行更加深入的社会学研究。
社交媒体虽然也可以看作是HTTP协议的网站、是传统互联网的一部分,但是与传统网站相比又有所区别。一个显著差异在于,社交媒体需要用户登录访问才能看到详细的内容,特别是社交媒体的API是需要预先授权才可以使用的;而传统网站如新闻、博客等,是不需要用户预先登录就可以访问的。传统的爬虫直接下载页面即可,若将传统的网络爬虫的方法应用于基于微博API的数据获取上会出现获取的数据不准确等若干问题。
在传统的互联网应用中,数据获取技术主要是网络爬虫技术。网络爬虫是类似的数据获取技术,其基本原理是根据URL(即统一资源定位符)获取页面,访问网站,下载页面,从其中解析出新的URL链接地址,然后下载新的页面。参考Modern InformationRetrieval、《搜索引擎:信息检索实践》等。
现有的社交平台(如新浪微博、腾讯微博)提供的开发API有如下特点:
(1)一次API访问就是一次HTTP请求。一次API调用返回页面的信息最小单位是记录;API调用返回的信息由若干条记录组成,一条记录可以表示一个用户详细信息、一条微博、一条评论等。
(2)一次API调用返回的记录数有上限。比如新浪微博规定获取微博列表API单次返回记录不超过200条,也就是单次访问最多返回200条。虽然有的API提供翻页的功能,但总页数也是有限制的,翻页可以指定页码,最多可获记录数=200条/页×最大页码。
(3)API调用得到的记录都是最新的记录,并且记录呈数据流形式,即一旦错过了获取的时机,就很难再次获取到了。比如获取搜索关键词的微博,每次API可获得最多200条记录,一共可以翻50页,总计可获取最新的20×50=1000条记录(微博)。如果当时含有此关键词的微博超过1000条,则只能得到最新的1000条,余下的微博记录就获取不到了。
(4)现有的API调用的记录依赖token资源。访问微博API需要通过“授权”获得token(比如新浪微博、腾讯微博是以OAuth2.0方式授权)。
(5)微博API访问时有限制条件。比如每小时所有接口访问不能超过4万次,每个IP每小时不能超过4万次。
(6)访问API有成本。有的接口还有可能是付费的接口,每次访问都有费用产生。
上述的微博API是通过HTTP协议传输数据。如果仅用Web爬虫技术,虽然理论上可行,但是会遇到若干问题:
(1)URL不包含在Web页面中,在获取微博API数据的过程中,需要根据查询、页码及其他信息构造新URL;
(2)API返回的是有结构的数据,通常用XML或JSON格式,如果忽略这些结构信息会丢失一些有价值的线索;
(3)如果API访问时不加限制的访问页面,会被封禁IP、微博账号甚至应用账号;
(4)没有充分获取API结果中信息,以有效地访问API获取数据;
(5)需要token资源才能获取API的结果,而token资源有有效期,需要合理管理(账号授权、检查token是否失效等)。
针对现有技术中获取互联网社交平台数据不准确、不完整的问题,目前尚未有公开的有效解决方案。
发明内容
针对相关技术中获取互联网社交平台数据不准确、不完整的问题,目前尚未有提出的有效解决方案。为此,本发明的主要目的在于提供一种互联网数据获取方法及装置,以解决上述问题。
为了实现上述目的,根据本发明的一个方面,提供了一种互联网数据获取方法,该方法包括:确定获取互联网数据的访问任务,其中,访问任务中携带有任务信息;根据任务信息调用对应的应用开发接口API单元;获取API单元返回的第一数据;计算下一次获取互联网数据的获取时间;在获取时间获取API单元返回的第二数据;返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,其中,互联网数据包括第一数据和第二数据。
进一步地,确定获取互联网数据的访问任务的步骤包括:获取任务列表中的任务开始时间;在当前时间超过或达到任务开始时间的情况下,确定任务开始时间对应的任务为访问任务。
进一步地,根据任务信息调用对应的API单元的步骤包括:获取API单元对应的令牌token和任务信息中的访问参数;创建访问任务对应的URL;将token、URL以及访问参数发送至API单元,以调用API单元。
进一步地,在获取API单元返回的第一数据之后,互联网数据获取方法还包括:解析第一数据得到数据列表;在获取时间获取API单元返回的第二数据之后,互联网数据获取方法还包括:解析第二数据得到第一解析结果,将第一解析结果补入数据列表中;在执行返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务的过程中,解析获取到的从API单元返回的数据得到第二解析结果,将第二解析结果补入数据列表中。
进一步地,将在当前时间获取互联网数据的过程中得到的数据列表记作第一数据子列表,将在当前时间之前获取互联网数据的过程中得到的数据列表记作第二数据子列表,其中,计算下一次获取互联网数据的获取时间的步骤包括:计算第一数据子列表和第二数据子列表的覆盖率;使用覆盖率计算时间变化量;将时间变化量与当前时间之和作为下一次的获取时间。
为了实现上述目的,根据本发明的另一方面,提供了一种互联网数据获取装置,该装置包括:任务确定模块,用于确定获取互联网数据的访问任务,其中,访问任务中携带有任务信息;调用模块,用于根据任务信息调用对应的API单元;第一数据获取模块,用于获取API单元返回的第一数据;时间计算模块,用于计算下一次获取互联网数据的获取时间;第二数据获取模块,用于在获取时间获取API单元返回的第二数据;循环模块,用于返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,其中,互联网数据包括第一数据和第二数据。
进一步地,任务确定模块包括:时间获取子模块,用于获取任务列表中的任务开始时间;任务确定子模块,用于在当前时间超过或达到任务开始时间的情况下,确定任务开始时间对应的任务为访问任务。
进一步地,调用模块包括:参数获取模块,用于获取API单元对应的令牌token和任务信息中的访问参数;创建模块,用于创建访问任务对应的URL;发送模块,用于将token、URL以及访问参数发送至API单元,以调用API单元。
进一步地,互联网数据获取装置还包括:第一解析模块,用于解析第一数据得到数据列表;第二解析模块,用于解析第二数据得到第一解析结果;第一保存模块,用于将第一解析结果补入数据列表中;第三解析模块,用于解析从API单元返回的数据得到第二解析结果;第二保存模块,用于将第二解析结果补入数据列表中。
进一步地,时间计算模块包括:覆盖率计算模块,用于计算第一数据子列表和第二数据子列表的覆盖率;时间变化量计算模块,用于使用覆盖率计算时间变化量;获取时间计算模块,用于将时间变化量与当前时间之和作为获取时间,其中,将在当前时间获取互联网数据的过程中得到的数据列表记作第一数据子列表,将在当前时间之前获取互联网数据的过程中得到的数据列表记作第二数据子列表。
采用本发明,通过任务确定模块确定获取互联网数据的访问任务,在调用模块根据访问任务中携带的任务信息调用对应的API单元之后,通过第一数据获取模块获取API单元返回的第一数据,然后时间计算模块计算下一次获取互联网数据的获取时间,并在获取时间获取API单元返回的第二数据,然后返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,以获取到与该访问任务对应的互联网数据。采用本发明,返回的是API数据,从而可以很好的保证返回数据的完整性和准确性,并且通过API获取返回的数据,不受页面访问的限制,从而不会被封禁IP、微博账号或应用账号,并且每隔一段时间获取一次数据,保证了获取数据的准确性,从而解决了现有技术中获取互联网社交平台数据不准确、不完整的问题,实现了准确完整的获取互联网社交平台的数据的效果。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
图1是根据本发明实施例的互联网数据获取装置的结构示意图。如图1所示,该装置可以包括:任务确定模块10,用于确定获取互联网数据的访问任务,其中,访问任务中携带有任务信息;调用模块20,用于根据任务信息调用对应的API单元;第一数据获取模块30,用于获取API单元返回的第一数据;时间计算模块40,用于计算下一次获取互联网数据的获取时间;第二数据获取模块50,用于在获取时间获取API单元返回的第二数据;循环模块60,用于返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,其中,互联网数据包括第一数据和第二数据。
采用本发明,通过任务确定模块确定获取互联网数据的访问任务,在调用模块根据访问任务中携带的任务信息调用对应的API单元之后,通过第一数据获取模块获取API单元返回的第一数据,然后时间计算模块计算下一次获取互联网数据的获取时间,并在获取时间获取API单元返回的第二数据,然后返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,以获取到与该访问任务对应的互联网数据。采用本发明,返回的是API数据,通过API获取返回的数据,不受页面访问的限制,从而不会被封禁IP、微博账号或应用账号,并且每隔一段时间获取一次数据,保证了获取数据的准确性,从而解决了现有技术中获取互联网社交平台数据不准确、不完整的问题,实现了准确完整的获取互联网社交平台的数据的效果。
在上述实施例中,可以随时获取社交平台的网站信息;并且处理信息的单位是Web页面,且不需要考虑IP限制问题。另外,获取数据的代价很小,成本很低,可以有效利用资源的问题。
在本发明的上述实施例中,任务确定模块可以包括:时间获取子模块,用于获取任务列表中的任务开始时间;任务确定子模块,用于在当前时间超过或达到任务开始时间的情况下,确定任务开始时间对应的任务为访问任务。
根据本发明的上述实施例,调用模块可以包括:参数获取模块,用于获取API单元对应的令牌token和任务信息中的访问参数;创建模块,用于创建访问任务对应的URL;发送模块,用于将token、URL以及访问参数发送至API单元,以调用API单元。
具体地,执行装置负责调用根据接收的任务信息调用对应的API单元,获取API单元返回的互联网数据。在上述步骤中,执行装置需要一些资源的支持,比如访问API所需的token。具体地,将本发明上述实施例应用于微博应用中,现有的微博一般采用OAuth协议授权以取得token,通常token有一定有效时间,并且在授权之后就会拿到有效的token,然后将token保存在API访问资源库中;上述实施例中的执行装置构造API访问的URL,如图4所示,将有效的API访问资源(如token、URL和访问参数)发给API服务器,API服务器会返回互联网数据或错误提示信息。
在本发明的上述实施例中,互联网数据获取装置还包括:第一解析模块,用于解析第一数据得到数据列表;第二解析模块,用于解析第二数据得到第一解析结果;第一保存模块,用于将第一解析结果补入数据列表中;第三解析模块,用于解析从API单元返回的数据得到第二解析结果;第二保存模块,用于将第二解析结果补入数据列表中。
根据本发明的上述实施例,时间计算模块可以包括:覆盖率计算模块,用于计算第一数据子列表和第二数据子列表的覆盖率;时间变化量计算模块,用于使用覆盖率计算时间变化量;获取时间计算模块,用于将时间变化量与当前时间之和作为下一次的获取时间,其中,将在当前时间获取互联网数据的过程中得到的数据列表记作第一数据子列表,将在当前时间之前获取互联网数据的过程中得到的数据列表记作第二数据子列表。
在本发明上述实施例中,执行装置调用API单元,获取API单元返回的互联网数据之后,将获取到的数据解析成记录列表。具体地,API单元返回的结果常用XML或JSON格式记录。其中,将在当前时间获取互联网数据的过程中得到的数据列表记作第一数据子列表L,将在当前时间之前获取互联网数据的过程中得到的数据列表记作第二数据子列表L0。
在获取当前时间的第一数据子列表L和第二数据子列表L0之后,对比L0和L,重新估算调整下一次获取互联网数据的获取时间,并动态调整时间装置。
具体地,计算第一数据子列表L和第二数据子列表L0两个数据列表的覆盖率p:
其中,p是介于0~1之间的数。
在获取覆盖率P之后,计算第一数据子列表L和第二数据子列表L0的时间变化量:Δt=Δt′(αp+β),其中Δt′表示上一次的时间变化量,初始值Δt0=Δtmin,α和β是常数,一组经验参数为α=0.5,β=0.8。在上述公式中,如果Δt小于最小时间Δtmin,则取最小间隔时间Δt=Δtmin。如果Δt超过Δtmax,则Δt=Δtmax,其中,Δtmin和Δtmax是预设的时间值。
在上述实施例中,在获取时间变化量之后,确定获取时间,即下一次获取数据的时刻为T+Δt,其中T表示当前时刻。
图2是根据本发明实施例的互联网数据获取方法的流程图,如图2所示该方法包括如下步骤:
步骤S202,确定获取互联网数据的访问任务,其中,访问任务中携带有任务信息。
步骤S204,根据任务信息调用对应的API单元。
步骤S206,获取API单元返回的第一数据。
步骤S208,计算下一次获取互联网数据的获取时间。
步骤S210,在获取时间获取API单元返回的第二数据。
步骤S212,返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,其中,互联网数据包括第一数据和第二数据。
采用本发明,确定获取互联网数据的访问任务,根据访问任务中携带的任务信息调用对应的API单元,并获取API单元返回的第一数据,然后计算下一次获取互联网数据的获取时间,并在获取时间获取API单元返回的第二数据,然后返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,以获取到与该访问任务对应的互联网数据。采用本发明,返回的是API数据,通过API获取返回的数据,不受页面访问的限制,从而不会被封禁IP、微博账号或应用账号,并且每隔一段时间获取一次数据,保证了获取数据的准确性,从而解决了现有技术中获取互联网社交平台数据不准确、不完整的问题,实现了准确完整的获取互联网社交平台的数据的效果。
上述实施例中的API为应用开发接口(Application Programming Interface),API返回的数据通常为XML或JSON格式。
上述实施例中的API单元可以为API服务器。
如图3所示,本发明的上述实施例中动态调整获取数据的时间可以通过如下步骤实现:
步骤S302:获取有效的API访问资源。
该步骤对应图2所示实施例的步骤S202。
步骤S304:调用API单元。
步骤S306:将API返回的数据进行解析得到n条记录。
步骤S308:计算下一次获取数据的获取时间。
步骤S310:在获取时间从API单元获取数据。
在本发明的上述实施例中,确定获取互联网数据的访问任务的步骤可以包括:获取任务列表中的任务开始时间;在当前时间超过或达到任务开始时间的情况下,确定任务开始时间对应的任务为访问任务。
具体地,如图4所示,可以使用定时驱动装置检查任务列表中是否有待访问API的访问任务。具体地,可以检测任务列表中是否有到达或者超过“任务开始时间”的访问任务,如果有,则立即启动该访问任务。具体地,定时驱动装置将任务信息(包括API名称、访问参数等)发送给数据获取装置的执行装置。
其中,上述实施例中的任务列表可以是保存于内存中,也可以是保存于数据库中。
表1示出了任务列表的格式。
表1:
根据本发明的上述实施例,根据任务信息调用对应的API单元的步骤可以包括:获取API单元对应的token和任务信息中的访问参数;创建访问任务对应的URL;将token、URL以及访问参数发送至API单元,以调用API单元。
具体地,执行装置负责调用根据接收的任务信息调用对应的API单元,获取API单元返回的互联网数据。在上述步骤中,执行装置需要一些资源的支持,比如访问API所需的token。具体地,将本发明上述实施例应用于微博应用中,现有的微博一般采用OAuth协议授权以取得token,通常token有一定有效时间,并且在授权之后就会拿到有效的token,然后将token保存在API访问资源库中;上述实施例中的执行装置构造API访问的URL,如图4所示,将有效的API访问资源(如token、URL和访问参数)发给API服务器,API服务器会返回互联网数据或错误提示信息。
其中,OAuth是目前广泛使用资源授权的协议。该协议最大的特点是:授权的第三方不会得到账号信息(比如用户名和密码),安全性好。例如,新浪微博和腾讯微博均使用OAuth2.0作授权协议。
上述实施例中的访问参数可以包括:不同的API接口需要不同的参数。比如新浪微博的商业搜索接口search/statuses/limited就需要近20个参数,其中,包括:q表示搜索关键词,ids表示指定用户ID列表,starttime表示起始时间等。
根据本发明的上述实施例,在获取API单元返回的第一数据之后,互联网数据获取方法还包括:解析第一数据得到数据列表;在获取时间获取API单元返回的第二数据之后,互联网数据获取方法还包括:解析第二数据得到第一解析结果,将第一解析结果补入数据列表中;在执行返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务的过程中,解析获取到的从API单元返回的数据得到第二解析结果,将第二解析结果补入数据列表中。
如图4所示,本发明的上述实施例可以包括:
步骤S402:调用API,获取数据,解析记录。
步骤S404:调整获取时间。
具体地,在第一次获取到数据列表之后,通过调整定时驱动装置动态调整下一次获取数据的获取时间。
步骤S406:将获取到的新的记录存入存储装置。
其中的新的记录即上述实施例中的第二解析结果。
具体地,将在当前时间获取互联网数据的过程中得到的数据列表记作第一数据子列表,将在当前时间之前获取互联网数据的过程中得到的数据列表记作第二数据子列表,其中,计算下一次获取互联网数据的获取时间的步骤包括:计算第一数据子列表和第二数据子列表的覆盖率;使用覆盖率计算时间变化量;将时间变化量与当前时间之和作为下一次的获取时间。
在本发明上述实施例中,执行装置调用API单元,获取API单元返回的互联网数据之后,将获取到的数据解析成记录列表。具体地,API单元返回的结果常用XML或JSON格式记录。其中,将在当前时间获取互联网数据的过程中得到的数据列表记作第一数据子列表L,将在当前时间之前获取互联网数据的过程中得到的数据列表记作第二数据子列表L0。
在获取当前时间的第一数据子列表L和第二数据子列表L0之后,对比L0和L,重新估算调整下一次获取互联网数据的获取时间,并动态调整时间装置。
具体地,计算第一数据子列表L和第二数据子列表L0两个数据列表的覆盖率p:
其中,p是介于0~1之间的数。
在获取覆盖率P之后,计算第一数据子列表L和第二数据子列表L0的时间变化量:Δt=Δt′(αp+β),其中Δt′表示上一次的时间变化量,初始值Δt0=Δtmin,α和β是常数,一组经验参数为α=0.5,β=0.8。在上述公式中,如果Δt小于最小时间Δtmin,则取最小间隔时间Δt=Δtmin。如果Δt超过Δtmax,则Δt=Δtmax,其中,Δtmin和Δtmax是预设的时间值。
在上述实施例中,在获取时间变化量之后,确定获取时间,即下一次获取数据的时刻为T+Δt,其中T表示当前时刻。
根据本发明的上述实施例,在确定下一次获取数据的获取时间之后,启动数据获取装置在获取时间获取第二数据,然后使用解析第二数据的结果更新数据列表,并将数据列表L中新增的记录存入到存储装置里。其中,存储装置可以是关系数据库(比如MySQL),也可以是非关系数据库(比如MongoDB)或其他存储工具。
本发明的上述实施例可以应用于采集微博数据的场景,如微博数据分析,社交网络分析,按关键词搜索微博等。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
采用本发明的上述实施例,通过调整获取数据的获取时间,调整API访问的频度,从而避免过度访问API,有效利用API资源(比如访问过频繁IP会被封禁),降低API访问成本(比如有的API按访问次数计费等)。具体地,如果当次API结果与前一次API结果的重合度较大,重合率会接近于1。若p=1,则Δt=Δt′×1.3,即下一次获取数据的时间间隔会延长至当前时间间隔的1.3倍。如果当次API结果与前一次API结果重合度小,最极端情况是没有重合,则p=0,Δt=Δt′×0.8,即API数据变化快,缩短下次获取数据的时间间隔为当前的0.8倍。
从以上的描述中,可以看出,本发明实现了如下技术效果:
采用本发明,确定获取互联网数据的访问任务,根据访问任务中携带的任务信息调用对应的API单元,并获取API单元返回的第一数据,然后计算下一次获取互联网数据的获取时间,并在获取时间获取API单元返回的第二数据,然后返回执行计算下一次获取互联网数据的获取时间的步骤,直至完成访问任务,以获取到与该访问任务对应的互联网数据。采用本发明,返回的是API数据,通过API获取返回的数据,不受页面访问的限制,从而不会被封禁IP、微博账号或应用账号,并且每隔一段时间获取一次数据,保证了获取数据的准确性,从而解决了现有技术中获取互联网社交平台数据不准确、不完整的问题,实现了准确完整的获取互联网社交平台的数据的效果。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。