当前位置:文档之家› 微博信息抓取系统毕业论文

微博信息抓取系统毕业论文

毕业论文微博信息抓取系统

【摘要】针对微博中庞大的数据量和用户关系群,本文提出并实现了基于新浪开放平台与Oauth2.0的微博信息抓取系统。该系统主要实现的功能有:(1)微博大厅的滚动微博及其评论的抓取(2)微博用户的好友及其相互关系的抓取。通过线程池和数据库实现了微博信息的抓取和存储,并通过prefuse的API,图形化的显示出用户关系。从实际运行效果分析,该抓取系统能够满足各种SNS应用的内容填充,及网络用户社会网络关系分析。

【关键词】Oauth2.0;新浪开放平台;社会网络关系;prefuse

1引言

1.1研究背景及意义

随着移动互联网的发展,中国迎来了真正的微博时代。微博由于其内容简短,写作门槛低,发布渠道便捷化,多样化,同步化,使得信息生产趋于零时间。与其他信息交流模式不同,微博最大的特点在于技术上的便携性。2009年,3G牌照的发放标志着移动互联网时代的到来,移动手机和互联网这两种在中国发展最为迅速的媒介开始融合在一起,为微博的快速扩张做了技术上的准备,与传统博客相比,微博对用户能够产生很强粘性的原因,就在于其在技术上无可比拟的便携性。用户可以通过各种方式登陆微博,发表微博。尤其是手机和微博的绑定使得这以新媒介对微博用户的接近性满足了4A的元素,即Anything,anywhere,anyone,anytime。任何用户可以在任何时间任何地点发布任何内容。从此,人们的信息交流得到了空前的大解放。微博信息抓取系统通过开放平台的API抓取我们所需要的信息,为各式各样的SNS[1]社区应用在运营初期充实其数据量和用户量,以吸引更多的用户关注和使用。SNS社区交友是现在网络用户之间相互交流的最主要方式。当前最流行的SNS网络莫过于开心网,人人网,以及各大微博了,其中以新浪微博的活跃用户量最为庞大,本课题主要以新浪微博为主要研究和抓取对象,实现信息抓取的功能。整个系统的框架拥有较强的可扩展性,可根据需要增加其他SNS网络社区的抓取模块。另外,本系统还从网络用户的社会网络关系出发,图形化的展示了网络用户之间的社交关系

1.2本课题主要工作

本文主要解决的问题有抓取新浪微博的微博大厅数据已经其相关的评论和用户信息。包括新浪微博的Oauth2.0认证,通过调用新浪微博的API,得到并解析服务器返回的json文档,建立相应的数据库,储存在数据库中。并通过Prefuse对抓取的微博用户好友关系进行了可视化的显示。实现全自动的抓取、解析、和数据存储过程。大大提高了信息收集的工作效率,并大大降低了信息收集的出错率。满足了企事业公司对微博信息的内容需求和网络用户的社会关系分析。

2新浪微博开放平台

2.1微博用户的授权认证

2.1.1 新浪微博应用创建

新浪微博开放平台允许所有微博用户创建自己的应用,用户只要填写清楚开发者的详细信息和应用的相关资料就可以创建自己的应用了。应用创建成功后,开发者将会获得该应用的APP KEY和Sercret Key。我们就是通过这两个key进行相关的技术开发工作。并且通过这两个key唯一标识我们的应用。其新浪微博应用创建和发布的流程图如图1所示。

图 1 新浪开放平台应用创建流程及发布流程图

2.1.2 OAuth2.0授权认证

OAuth2.0是从2006年开始设计OAuth[2]协议的下一个版本。OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

相比于OAuth1.0,OAuth2.0整个授权验证流程更加简单和安全。也是新浪微博开发平台未来最主要的用户验证和授权方式。使用新的 2.0协议进行授权认证。开发者只需要调用oauth2/authorize接口引导用户授权,并在授权后重定向的网页得到code码后向服务器oauth2/access_token接口换取access_token,就可以使用这个access_token调用新浪微

博的API了。

其授权的基本流程如图2所示:

图 2 OAuth认证基本流程

虽然2.0的授权机制更简单安全,但是越安全越说明其限制越多,其中access_token 的有效期在开发测试阶段只有24小时。在24小时之后就必须重新授权获取新的access_token。而新浪微博的一些接口也有访问频次限制。在软件开发测试阶段,通常一个接口的访问频次限制在150次/小时,当应用审核通过正式发布以后将会有更多更大的权限。其授权标准也会有一定的提升,访问频次的限制将提高,access_token的有效期也会延长。当然开发者也可以和开放平台申请更高的访问频次和token有效期,开放平台会根据你应用的类型和规模审核你的请求。

2.2新浪微博API

2.2.1JSON数据交换格式

JSON(Javascript Object Notation),是一种轻量级的数据交换格式[3],它是JavaScript的一个子集,但它是独立于语言的文本格式,易于人阅读和编写,同时也易于机器解析和生成。它的这些特性使它成为理想的数据交换语言。

JSON构建于两种结构。一种是键值对的集合形式,一种是值的有序列表。这些结构使得大部分现代计算机语言都以某种形式支持它们,这使一种数据格式在同样基于这些结构的编程语言之间交换成为可能。与XML比较,JSON在Web数据交换处理上的更具优势。采用JSON 来缓存元数据,便于存储复杂的验证数据,客户端容易解析和使用。在具体实现上,通过服务器程序生成JSON存储验证数据和函数,利用AJAX技术设计客户端函数来访问元数据以验证用户输入。实现的结果表明:由于使用JSON存储复杂的元数据和验证规则,该方案在保证安

全性和可扩展性的同时,提高了验证效率。

2.2.2statuses/public_timeline接口

此接口[4]是用于返回最新的公共微博,也就是微博大厅的最新微博。该接口使用的是GET 请求方式,返回的是JSON格式的微博数据。由于我们使用的是OAuth2.0方式授权,我们的请求参数将非常简单。只需要将之前授权得到的access_token和需要请求的返回记录条数count以及返回结果的页码page传给服务器就可以了。其请求参数说明如表1所示:

表 1 public_timeline请求参数说明

请求服务器成功之后会返回一串JSON格式的数组。数组中的每个元素就是一个微博信息。它包括了微博内容、微博发表者、微博评论和转发次数等等重要信息。我们将其全部解析出来存储在我们的数据库中。该接口返回数据说明如表2所示:

表 2 public_timeline接口返回字段说明

2.2.3comments/show接口

此接口[5]是根据微博ID返回该微博的评论列表。该接口和上面的timeline接口使用方法基本上相同。但是它多了几个可选参数以满足我们个性化的需求:since_id参数可以指定返回比since_id时间晚的评论。max_id参数可以指定返回小于等于max_id的评论。filter_by_author参数可以对返回的评论按照评论者类型进行筛选,例如可以只返回关注者的评论,或者是陌生人的评论,其请求参数说明如表3所示:

表 3 comments/show接口返回字段说明

请求服务器成功之后会返回一串JSON格式的数组。数组中的每个元素就是一个评论信息。它包括了评论内容、评论发表者、评论的微博和该评论的回复评论等等重要信息。我们将其全部解析出来存储在我们的数据库中。该接口返回数据说明如表4所示

表 4 comments/show接口返回字段说明

2.2.4friendships/friends/in_common接口

此接口[6]是用户获取两个用户之间共同关注人列表。选此接口的目的是使我们可以得到一个比较聚合的网状关系集合,以达到分析社会网络关系的目的。在此,我选择了一个热门微博用户的UID作为测试SUID。以微博大厅抓取到的用户UID作为需要获取共同关注好友的UID。来获取他们的共同好友。其请求参数说明如表5所示:

表 5 获取共同关注人接口返回字段说明

请求服务器成功之后会返回一串JSON格式的数组。数组中的每个元素就是一个用户信息。我们将其全部解析出来存储在我们的数据库中。该接口返回数据说明如表6所示

表 6 获取共同关注人接口返回字段说明

3社会网络关系分析

3.1SNS社区交友

SNS,全称Social Networking Services,即社会性网络服务,专指旨在帮助人民建立社会性网络的互联网应用服务,根据哈佛大学的心理学教授Stanley Milgram提出的六度分隔理论,即最多通过六个人你就能够认识任何一个陌生人。按照六度分割理论,每个个体的社交圈都在不断放大,最后成为了一个容纳全世界人类的巨型网络[7],这就是社会性网络的早期理解。后来有人根据这种理论,创立了面向社会性网络的互联网服务,并通过“熟人的熟人”来进行网络社交拓展,比如Friendster,wallop,adoerme等。

SNS的实名制是用户快速找到熟人的基础,用户真实信息可以形成用户关系的真是相关性,这种相关性可以让系统对用户之间进行匹配。从而是用户更快的找到自己的熟人。SNS 用户关系是实现信息传播的渠道基础,一维或者多维的用户真实关系,让用户之间形成了一张巨大的社交网。这张网可以容纳整个世界的人,从而形成一种联动效应,

但这种社交方式只是人们社交拓展的一种方式,并非社交拓展的全部。在国内,SNS的的表现形式也越来越多样,网络用户进行社交拓展的方式也越来越多。比如根据相同话题而进行凝聚的百度贴吧。根据相同兴趣爱好而进行凝聚的开心网,豆瓣网。根据相同学习经历而凝聚的人人网,QQ校友等等,都被纳入了SNS的范畴。

事实上,目前SNS网站已经成为了一种很火爆的互联网现象,如果说美国SNS的高速发展是因为具有庞大的用户基础,那么我国SNS的巨大发展则与高速发展的互联网用户信息群息息相关,根据中国互联网络信息中心的报告,中国网民规模已经跃居世界第一位了。开心网的火爆发展已经掀起了国内SNS的井喷,SNS已经是目前互联网行业最受瞩目的新兴领域。

下面是国内几个知名SNS网站首页截图

图 3开心网首页

图 4人人网首页

3.2LBS基于位置服务

LBS[8],全称 Location Based Service。它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息,在GIS(Geographic information System)平台的支持下,为用户提供相应服务的一种增值业务。

随着移动互联网和移动通信软硬件的发展,手机不仅仅只用于打电话发短信了。玩游戏,交朋友,看视频等等都成了不少手机用户必不可少的娱乐项目了。目前,内嵌GPS模块的智能手机逐步成为市场的主流,由于通过GPS模块能够获得速度、方向以及二维乃至三维的空

间位置信息,其所带来的好处不仅仅是导航,其他以位置为基本特征的相关服务日渐兴起,越来越收到大众的青睐。此外,由于具备GPS导航功能的手机都集成有地图数据,是LBS 业务实现的最佳载体,通过将电子地图,客户关心的位置信息以及移动互联网信息三者融合,这样的技术将会带来新的商业模式和盈利模式。例如主打陌生人交友的手机端软件陌陌。签到模式休闲娱乐类软件嘀咕,街旁等等。本课题的研究对于LBS类软件也有着一定的辅助功能,它能够帮助该类软件在运营初期增强和积累数据库数据量和用户量。

图 5 LBS软件陌陌

图 6 LBS软件街旁

图 7 LBS软件嘀咕

图 8 LBS 软件遇见

3.3社会网络

社会网络[9]是指社会成员之间因为互动而形成的相对稳定的关系体系,社会网络关注的是人们之间的互动关系,社会互动会影响人们的社会行为[6]。从社会网络的角度出发,人在社会环境中的相互作用可以表达为基于关系的一种模式或规则,而基于这种关系的有规律模式反映了社会结构,这种结构的量化分析是社会网络分析的出发点。

近年来,随着图论,概率论以及各种几何学的发展和完善,社会网络分析作为一种应用性很强的社会学研究方法越来越受人瞩目。在社会学中,网络研究通常有两种视角:第一,将网络视为一种分析工具,凭借这种工具可以理清行动者之间,行动者与其环境之间的关系;第二,将网络视为由行动者之间的关系所构成的社会结构,此时关系本身成为研究的对象。

网状结构通常指网络内部各行动者之间相对稳定的关系模式或“结构洞”模式。外国学者伯特是最早系统阐述“结构洞”这个概念的学者,用它来特指网络中某些行动者之间关系缺乏的现象,按照伯特的观点,当网络中人们之间没有直接关系或关系缺失时,网络就会出现空洞,即所谓的“结构洞”。“结构洞”之所以重要,是因为“结构洞”通常构成了网络中信息折射和资源流动的“阀门”,是否折射或流动,如何折射或流动,这一切都可以掌控在占据这个“结构洞”的行动者手里。因此,在网络中占有的“结构洞”越多,行动者在结构上所占有的优势就越大,通过这些优势获得回报的可能性就越高。

通过研究网络关系,有助于把个体间关系、“微观”网络与大规模的社会系统的“宏观”

结构结合起来。图9是社会网络关系图。

图 9 社会网络关系图

3.4Prefuse可视化工具

我们处在一个信息爆炸的时代,对繁杂的抽象信息之间的复杂关系进行探索的努力,促使了信息可视化这一崭新科学领域的出现。

Prefuse[10]是一个可扩展的软件框架,它可以帮助Java语言开发者开发交互的信息可视化程序。它在分析社会网络关系有巨大的作用,我们可以将我们所需要绘制的绘图数据转换为prefuse内部数据的形式,graph,tree。它支持由表,图,树组成的数据结构,字段的数据索引和选择列的查询,并且高效的利用内存。并且通过一组活动的时序机制来实现动画,包含了可视化的变形效果,包括物体位置移动和通过空间的放大缩小,它还融合了lucene

文本查询engines,并且内建了类似于SQL的语言语句可以针对数据进行行和列的操作。在位置和动画中还利用了物理力学的模拟,使整个动画的效果非常的真实好看。它支持从XML,数据库导入绘图数据。开发者只要通过简单使用他的API就能将数据库中的数据绘制出来。微博用户之间的好友关系就是一张网络,好友的好友的好友等关系不断蔓延,形成一个网状结构,用prefuse可视化的展示社会关系将会非常的直观和清晰[11]。图10是Prefuse分析社交网络的效果图

图 10 Prefuse社交网络分析图

4数据库连接技术

4.1MYSQL

MySQL是一个小型关系数据库管理系统[12]。它是完全网络化的跨平台关系型数据库系统,是一个真正的多用户,多线程SQL数据库服务器,同时是具有C/S体系结构的分布式数据库管理系统,它具有功能强,使用简便,管理方便,运行速度快,安全可靠性强等有点,用户可以利用许多语言编写访问Mysql数据库的程序,对于中,小型应用系统是非常理想的。除了支持标准的ANSISQL语句,更重要的是,它还支持多种平台。。它支持Linux,Mac OS,Windows等多种操作系统,并且为多种编程语言提供了API,提供了TCP/IP、ODBC和JDBC 等多种数据库连接途径。这些系统特性使得它收到绝大多数个人开发者和中小型企业的追捧。目前Internet上流行的网站架构方式就是LAMP(Linux+Apache+MySQL+PHP)。由于这四个软件都是免费的或者开源软件,因此使用者可以不用花一分钱就建立起一个稳定、免费的网站系统。

4.2JDBC

JDBC,全称Java Database Connectivity [13]是一种用于执行SQL语句的Java API.提供了诸如查询和更新数据库中数据的方法。它由一组Java语言编写的类与接口组成。使用JDBC 可以很容易地把SQL语句传送到任何关系型数据库中。JDBC API 提供两种主要接口:一

是面向开发人员的Java.sql程序包,使得Java程序员能够进行数据库连接,执行SQL查询,并得到结果集合,另一方向是面向底层数据库厂商的JDBC驱动,它介于前端应用程序与后端数据源之间。根据其特性不同,大致分为4种类型:

1.JDBC-ODBC桥驱动程序。应用程序通过JDBC-ODBC桥,以调用ODBC连接数据

源,由于微软windows系统中的ODBC大多已支持各种类型的数据源,因此在建

构上较为方便,可直接使用JDK附属的驱动程序进行连接。但是由于经过了桥的转

换,因此在效率上并不十分理想。因此不太适合于企业应用上。

2.Native API 驱动程序。此类型驱动程序也需要经过类似桥的机制连接数据源,所不

同的是,此类型的桥为原声函数库,是软件厂商针对其数据库自行开发的。由于使

用了源生码,提高了执行速度。但如果出错,修改起来也将非常麻烦。

https://www.doczj.com/doc/127517858.html,-Protocol 驱动程序。此类JDBC驱动程序会将SQL语句转换成为标准网络协议,

交由数据库网关或应用程序服务器处理,应用程序服务器将标准网络协议翻译成为

数据库厂商的专有特殊数据库访问协议与数据库通信。此类驱动程序可充分运用程

序服务器的安全机制,并且不需要额外的ODBC或者原生函数库等机制,因此系统

可移植性强。

4.Native-Protocol 驱动程序。此类驱动程序不需要任何中介机制,直接转换JDBC调

用,成为DBMS的网络协议,直接访问数据源,这对Internet应用是高效的,但是

由于缺乏安全机制的支持,可能会存在一些潜在的安全隐患。

Java与JDBC的结合,使程序员可以只写一次数据库应用软件后,就能在各种不同数据库上运行,真正发挥了Java“编写一次,处处运行”的优势。

4.3本系统对数据库连接的封装

本次课题在JDBC的基础写了一个管理数据库的封装类。封装了与数据库连接方法,数据库数据更新方法,类结构如图11所示。

图 11 数据库管理类

本系统所用到的数据库表结构如图12所示:

图 12 数据库表结构

图 13 好友关系表结构

图 14 微博评论表结构

图 15 微博信息表结构

图 16微博用户表结构

5实验环境

本系统所使用的开发环境是windows系统。理论上也支持Linux系统。开发语言使用的是Java程序语言,开发工具使用的是eclipse。另外本系统还使用了新浪开放平台的weibo4J 开源代码和Prefuse的开源框架。引用的外部jar包如图17所示。

图 17 系统引用jar包

6新浪微博抓取系统实验方案

6.1功能介绍。

本工程模块用于实现新浪微博的授权认证和微博信息的抓取。是整个系统的核心功能。其整体功能模块划分如图18所示:

图 18 系统模块划分图

6.2实现方案介绍

首先我们需要完成测试用户的授权认证过程:

我们需要的是打开浏览器请求https://https://www.doczj.com/doc/127517858.html,/oauth2/authorize接口。把我们之前申请好的应用的App_key和Sercret Key作为参数传过去,服务器会跳转到认证页面。输入测试用户的微博账号和密码。服务器会跳转到我们之前申请应用时设定的重定向页面。并且在重定向页面的URL后面会带有一个code参数。例如

(https://www.doczj.com/doc/127517858.html,/jayslong?code=f98824ae9dc0552b4bf5a07e4778cfbd)我们根据这个code去请求https://https://www.doczj.com/doc/127517858.html,/oauth2/access_token接口。服务器认证通过后就会返回经过授权了的access_token。我们就可以用这个token去请求开放平台的API 了。图19是新浪微博抓取模块的流程图

图 19 新浪微博抓取系统设计方案流程图6.3工程模块各类关系介绍

本项目的源代码结构如图20所示:

图20 项目代码结构图

其中OAuth4Code.java是用来获取access_token。运行OAuth4Code.Java将会跳完新浪服务器进行认证。运行截图如图21所示

相关主题
文本预览
相关文档 最新文档