当前位置: 查字典论文网 >> 社交媒体数据的获取分析

社交媒体数据的获取分析

格式:DOC 上传日期:2023-07-22 00:04:36
社交媒体数据的获取分析
时间:2023-07-22 00:04:36     小编:

摘要:本文主要介绍了对于社交网络中媒体数据的获取分析。首先介绍了一般的获取策略,即获取数据的一般过程。然后根据当前情况,主要是对两种方式进行分别分析。并在两种方式上分别提出了提高效率的一般方法。最后对这两种获取方式进行性能比较,并做出总结。

关键词:媒体数据;方式;分析;效率

中图分类号:TP393 文献标识码:A DOI:10.3969/j.issn.1003-6970.2015.02.019

0 引言

随着互联网的快速发展,世界范围内的互联网用户也在急剧膨胀,各种言论充斥其中,人们利用手机、电脑可以随时随地通过论坛、BBS、SNS等更新自己的动态、发表言论。

微博作为Web2.0时代新生网络的应用形式,它集成了手机短信、博客和社交网站的优点,使信息更加实时、内容更加简洁、社区更加活跃。在最近几年,因为其内容短小、实时性、便捷行、原创性、互动性和大众的特点已经被人们广泛接受,用户可以随时、随地利用移动终端发布文字、图像、视频等,草根与名流共同创造、传播和分享着信息,进行着没有界限的对话。

随着微博的普及,微博的传播速度也越来越快,其舆论导向的作用也越来越突出。同时,信息量在传播中变得海量。通过对微博信息进行挖掘和分析,关注其中的社会热点话题,可探寻其规律并预测动向,分析热点事件的舆论趋势,特别是微博信息传播的实时性可以应用于突发性社会事件和自然事件的监测和预警。“工欲善其事必先利其器”,要想对微博数据进行研究,获得微博平台上大量的数据是要做的第一步。本文旨在对微博采集的方式进行分析,为实现对微博数据的高效抓取提供依据,并对其性能进行测试,为建立统一的数据采集平台提供方便,以便后续挖掘。

微博采集主要有两种方式,分别是开放API与网页解析。基于新浪API的数据抓取策略性能高,但是因为服务器限制不能获取完整的数据集;基于网页解析的方案可以获得最大的数据文本,但是效率却比API低。

系统实现依赖的具体技术有:媒体的爬取策略、Web2.0下OAuth认证、多线程技术、http协议下载技术、XML数据集成、分布式技术。

1 社交媒体爬虫介绍

大多数的社会媒体,例如Faeebook、Twitter、新浪微博等均提供了数据访问的API接口,其获取方式类似。先简单介绍主流的社会媒体的网络爬虫原理。

主流的社交网络均在一定程度上开放了数据平台,提供了数据访问的API接口。调用社会媒体的API接口函数,获取人物的背景信息、社交信息、发布信息、交互信息。社交网络的信息主要通过HTTP的方式进行传递(图1),获取方式是HTTP请求。社会网络在开放平台提供的基本API接口基础之上,又封装了不同语言的SDK,主要有Java、PHP、Javascript、Flash等,可根据数据的不同而选择不同的开发语言,尽量减少请求次数和数据传输量,提高系统的分析效率。社会网络的信息获取主要有以下几个重要部分:

①权限验证:社会媒体的信息获取必须在权限允许之内,请求的数据不涉及隐私,是可公开的。

②注意事项:使用者的请求在一定的时间内是有次数限制的,所以要合理的使用请求。

依据上述原理,网络穿透对抗技术相关的特定人群所组成的社会网络,先简单介绍社会网络的网络爬虫算法,如图2。

选择一组人物作为初始的种子节点,利用雪球采样策略,顺着人物的关注链向外爬行,获取社会网络上每个人物节点的背景信息、社交信息,探测出整体网络。主要思想如下:

1.选择一组社会媒体的人物{ID1,ID2,…IDm}作为种子节点,加入待爬行节点队列Q。

2.如果Q=NULL或超过阈值(预设的爬行时间或扩展层数)则退出;否则,从Q中取出一个用户IDk

3.利用社会媒体的数据访问API访问函数,抓取该用户节点IDk的个人信息,将人物的背景信息(位置信息、标签、个人描述)、社交信息(关注信息、粉丝信息),分别存入社会网络数据库。

4.扩展该节点IDk,将其邻居节点(IDk的关注列表中全部用户ID)加入Q,转到2。

利用元搜索技术,探测初始的网络穿透对抗技术相关的特定人群所组成的社会网络。在探测出的社会网络上,获取了一组初始的特定人群节点。在此基础上,利用关系分析技术,对上述的初始的特定人群节点进行扩展,生成特定人群节点集合,组成待检测的人物频道列表。然后利用面向人物频道列表的网络爬虫,侦听每个人物频道发布、转发、评论的信息流(微博、博客、帖子等)。面向人物频道列表的网络爬虫的工作原理比较简单。即:对于待检测的人物频道列表,定时爬行每个人物频道发布、转发、评论的信息流。

2 基于API的数据获取

2.1 Oauth认证

以新浪为例,使用API首先要解决的是用户认证问题。所谓认证是指用户在不向第三方(比如我们的采集系统)透露自己的用户名的同时,使第三方软件提供方申请获取该用户资源授权。图3为OAuth协议的描述;该协议实现的具体流程则见图4。

结合图3描述新浪API的用户验证过程:

A.使用者向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求,请求需要带上的参数见图4。

B.OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth token与对应的oauth token secret,并返回给使用者。

c.使用者向OAUTH服务提供商请求用户授权的Request Token。向UserAuthorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。 D.OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。这一步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。

E Request Token授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见下图,这个比第一步A多了一个参数就是Request Token。

F.OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。

G.使用者以后就可以使用上步返回的Access Token访问用户授权的资源。

这里要说明的是:

(1)新浪官方虽然要求第三方应用访问用户的某些资源(如用户的好友列表)时要有该用户的亲自认证,但是还有一些(如用户的基本信息)资源是不需要该用户亲自认证的(也就是说,对于这类资源来说,只要有一个用户通过了验证,就可以利用这个用户AccessToken访问包括这个用户在内的所有用户的资源)。因此,我们注册了一些马甲账号,自己通过认证,利用API采集此类信息。

(2)认证过程中,账号密码的输入是在浏览器中进行的,AecessToken的返回也是在浏览器的URL中,这些都需要手动干涉。如何消除手动干涉的动作,将在Http协议下载技术中进行说明。

2.2 多线程技术

新浪微博的数据量是十分庞大的,单线程会严重降低采集效率;无论是API还是Web爬虫都不可能做到无限制的采集(每个IP地址只有1000次调用API的权限,Web爬虫采集过于频繁也会被封号或者风IP)。采用单线程,一旦出现封锁的状况,程序就会崩溃,不得不重新配置启动;最后,我们分别用API和页面解析的方式获取不同的数据,当然也希望这两项工作同时进行。因此多线程是最理想的方式。图5为用户细心采集模块流程图。

3 利用页面解析技术采集微博信息

3.1 http协议下载技术

前面提到的在不启动浏览器的前提下进行认证、模拟登陆(浏览器浏览微博时,如果不登陆的话就只能浏览极少的一部分页面,页面下载也是如此,我们请求页面是需要在附加登录信息,如cookie)和微博的采集都依赖http协议下载技术。

Python的urllib、urllib2等几个模块提供了实现request请求的发送和相应的接收,我们只需要构造自己的post数据和header(post和header内容通过抓包分析获得)。微博采集请求页面时需要携带cookie,所以我们还必须设置cookie处理器来保证cookie,这通过cookielib模块实现。

利用http协议下载技术下载微博信息流程与利用API进行用户基本信息采集类似。

3.2 XML数据集成

因为我们采用不同的方式获取用户基本信息和微博列表、好友列表等,因此返回的数据格式是不一致的;我们若要开发一个针对各个微博的采集系统,而每个微博平台的数据结构也存在差异。XML作为轻量级的数据储存文件,具有:内容和结构完全分离、互操作性强、规范统一、支持多种编码、可扩展性等优点。为了方便后续的数据分析,我们采用xml定义数据进行集成存储。见图6。

3.3 分布式技术

微博的数据量十分庞大,采用一台爬虫机会耗费大量时间,而且容易引发封号、封IP;多个爬虫程序又可能引发数据大量冗余,因此我们采用分布式的爬虫框架,如图7。

整个爬虫程序分为三个部分。

Scheduler:一个简单的调度器,主要作用分配UID给每个worker,并响应Monitor命令。

Monitor:监控程序,收集各个worker程序的心跳,并有一个web接口。用户可以在Monitor进行设置。

Crawler-爬虫worker程序,每个worker从Scheduler拿到UID,就去抓取这个微博用户数据。

4 策略对比

以上是对采集方法策略的介绍,现在要对这两种策略的实际性能分析。首先对于开放API,必须通过登陆授权。用户需要在新浪开放平台上创建了一个APP,通过访问APP时的登陆进行授权,从而获取这个账号调用API的权限。并不是登陆授权之后就可以无限制的调用API,根据授权等级的不同,接口访问频次权限。一般针对一个服务器IP的请求次数限制为测试授权:1000次/小时、普通授权:10000次/小时、中级授权:20000次/小时、高级授权:30000次/小时、合作授权:40000次/小时。此外还有针对一个用户在使用一个应用的请求次数限制。

而对于网页采集进行测试,采集时间约2.5小时,采集微博数量约30W,平均每秒约采集35条微博,共发送请求17212次(页面),平均每秒请求2次。

图8所示为连续采集时每个目标用户采集效率曲线(目标用户编号只代表采集先后顺序)。

图9所示为连续输入的11个目标集的请求页面的性能曲线,每次请求都会返回一个页面,对应浏览器浏览时的一页。

通过以上对比可以得出以下结论:

结论1:采集速度为30~40条/秒,事实上,根据我们得到的数据,这个数字是34.73,远低于API。

结论2:每秒钟发送2个请求,与API相当。

结论3:浏览器默认每页显示20条微博,两个页面就是40条,而真正拿到的微博数量应该低于40条,因为并不是每个用户的微博总数都是20的整数倍,这与结论1照应。

结论4:因为API可以设置每次请求返回200条微博,页面爬取时不能设置每页的返回数量,所以虽然请求次数相当,但拿到的数据量却相差甚远。

结论5:采集过程中未发现采集中断,方法是尽量减少线程,初步结论是能够在一定程度上突破API请求次数的限制;相应用户的所有数据也全部拿到。

5 结论

在获取数据的时候,基于开放API和网页解析各有优势,在实际的操作过程中可以将这两种方式结合,发挥各自的优势,来实现快速大量的获取数据。同时,提高效率的方式还有很多,在实际的开发过程中,可以根据具体情况来进行不同的优化。

全文阅读已结束,如果需要下载本文请点击

下载此文档

相关推荐 更多