基于新浪微博的用户信息爬虫及分析.doc

上传人:wj 文档编号:1234490 上传时间:2023-04-30 格式:DOC 页数:32 大小:1.48MB
下载 相关 举报
基于新浪微博的用户信息爬虫及分析.doc_第1页
第1页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第2页
第2页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第3页
第3页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第4页
第4页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第5页
第5页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第6页
第6页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第7页
第7页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第8页
第8页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第9页
第9页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第10页
第10页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第11页
第11页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第12页
第12页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第13页
第13页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第14页
第14页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第15页
第15页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第16页
第16页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第17页
第17页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第18页
第18页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第19页
第19页 / 共32页
基于新浪微博的用户信息爬虫及分析.doc_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于新浪微博的用户信息爬虫及分析.doc

《基于新浪微博的用户信息爬虫及分析.doc》由会员分享,可在线阅读,更多相关《基于新浪微博的用户信息爬虫及分析.doc(32页珍藏版)》请在冰点文库上搜索。

基于新浪微博的用户信息爬虫及分析.doc

目录

摘要 I

Abstract II

1引言 3

1.1选题背景与意义 3

1.2系统开发工具 3

1.2.1vs2008 3

1.2.2oracle11g 3

1.2.3boost库 3

1.2.4GZIP压缩算法函数库 3

1.2.5JSON格式文件转换函数库 4

2系统需求分析与设计 5

2.1系统需求 5

2.1.1名词说明 5

2.1.2系统功能需求说明 5

2.1.3系统总体功能设计 7

2.2系统数据库构建 9

2.2.1数据库设计 9

2.2.2数据库详细设计 9

3系统详细设计与实现 12

3.1爬虫系统详细设计 12

3.1.1HTTP请求数据包 12

3.1.2HTTP返回数据包 13

3.1.3数据分析与提取 13

3.1.4AnaData类 13

3.1.5数据入库 15

3.2服务端详细设计 16

3.3客户端详细设计 17

3.3.1登录页面 17

3.3.2注册新用户和忘记密码页面 18

3.3.3用户关注列表查询界面 19

3.3.4微博用户标签分类查询 20

3.3.4发布微博并@列表框中的微博用户昵称 20

3.3.5微博用户昵称模糊搜索 21

3.3.6微博用户微博查询 21

4系统部署与测试 22

4.1系统部署图 22

4.2系统测试 22

5结束语 29

参考文献 30

致谢 31

-31-

摘要

随着互联网信息技术的发展,在这个信息时代,数据量的增长速度已经远远超过的我们的想象。

迅速的对这些数据进行处理,进行信息的提取已经成为目前计算机领域一个巨大的难题。

而且无论是政府还是企业,对于大数据的掌握都可以起着至关重要的作用。

数据处理技术蕴含的巨大的商业价值必将被慢慢的挖掘出来。

本文以新浪微博作为信息载体。

对新浪微博的用户信息进行收集和分析,对新浪微博信息数据转化成价值的可行性进行了尝试。

设计出了一个可以获取新浪微博信息的数据收集系统,并进行一定的数据分析和数据展示。

关键词:

C++,新浪微博,数据挖掘

Abstract

WiththeInternetdevelopmentofinformationtechnology,inthisageofinformation,theamountofdatagrowthhasfarexceededourimagination.Rapidprocessingofthesedata,theextractionofinformationhasbecomeahugeprobleminthecomputerfield.Andwhethergovernmentorcorporate,cangraspforbigdataplaysavitalrole.Thetremendouscommercialvalueofdataprocessingtechnologyisboundtobeslowlyexcavated.

Inthispaper,SinaWeiboasaninformationcarrier.SinaWeibouserinformationcollectionandanalysistheSinamicrobloggingdataintothevalueofthefeasibilityofatry.DesignonecangetthetheSinamicroblogginginformationsystemofdatacollectionanddataanalysisanddatapresentation.

Keywords:

c++,SinaWeibo,DataMining

1引言

1.1选题背景与意义

随着互联网信息技术的发展,目前的信息增长的速度已经进入了飞速膨胀的阶段。

“如果说IBM的主机拉开了信息化革命的大幕,那么‘大数据’才是第3次浪潮的华彩乐章。

”著名未来学家、当今世界最具影响力的社会思想家之一托夫勒在《第三次浪潮》中说过的内容如今已将逐渐成为事实,大数据正在改变这我们的生活。

IDC(国际数据公司)在2011年6月的数据统计[1],全球数据量在2011年已达到1.8ZB,在过去5年时间里数据量增加了5倍。

1.8ZB是什么样的概念?

1ZB等于1万亿GB,1.8ZB也就相当于18亿个1T的硬盘。

有效的对这些数据处理,去噪和提取信息,将数据转换成价值的技术已成为目前市场最为广阔的研究课题。

例如数据挖掘,分布式计算,机器学习等等新的信息技术的产生,他们目的都是为了能够从这无比巨大的数据中,获取能够用于商业决策和企业管理的信息[2]。

新浪微博于2009年正式上线,至2010年11月,新浪召开首届微博开发者大会时披露其微博用户突破5000万。

2011年3月,新浪CEO曹国伟在发布财报时介绍称,其微博的注册用户总数已超过1亿。

目前,新浪微博用户量已达到5亿。

因此,新浪微博的数据具有极大的开发潜力。

新浪微博数据平台是一个良好的数据载体。

除了足够大的数据量,相比与腾讯QQ空间,百度贴吧等,新浪微博还具有其他一些优点,如:

1)具有一定的实名制,一些社会名人的加入提高了微博的影响力。

2)可追寻的关系链。

3)具有极快速的传播能力。

因此,我选择了新浪微博作为爬虫进行用户分析的数据载体。

1.2系统开发工具

1.2.1vs2008

1.2.2oracle11g

1.2.3boost库

Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。

Boost库有些内容有望成为下一代C++标准库内容。

甚至替代现在的STL库。

boost库在多线程处理上具有更多的优势,可以在linux和window系统中使用而不用修改代码,除了强大的可移植性,boost在运行中也具有极大的稳定性,因为加入了智能指针的概念,提高了开发效率。

[3]

1.2.4GZIP压缩算法函数库

从新浪接口获取的数据数经过gzip压缩加密的数据,进行解压后即可获得json文件格式的数据。

GZIP最早由Jean-loupGailly和MarkAdler创建,最初用于UNIX系统的文件压缩。

而现今它已经成为Internet上使用非常普遍的一种数据压缩格式,或者说一种文件格式,可以很好的对数据进行压缩。

GZIP编码是可以很好的提高WEB应用程序的性能。

大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。

当访问服务器中的网站时,服务器将网页内容压缩在进行传输,一般对纯文本内容可压缩到原大小的40%.[4]

1.2.5JSON格式文件转换函数库

因为新浪微博的数据接口格式为json。

为了获取微博数据,必须从JSON数据里面提取需要的信息。

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。

JSON采用完全独立于语言的文本格式,JSON是一种理想的数据交换语言。

易于人阅读和编写,同时也易于机器解析和生成。

[5]

2系统需求分析与设计

2.1系统需求

2.1.1名词说明

1)微博用户信息:

指的是新浪微博的用户的ID、粉丝数、关注数、注册时间等信息、

2)微博信息:

指的是微博用户发布的微博的ID、内容、发布时间,评论数,转发数等信息。

3)用户:

指的是使用本系统的用户。

2.1.2系统功能需求说明

微博开放平台是一个基于新浪微博客系统的开放的信息订阅、分享与交流平台。

微博开放平台提供了海量的微博信息、粉丝关系、以及随时随地发生的信息裂变式传播渠道。

系统分成三个部分:

数据爬虫,服务器端,客户端。

(1)数据爬虫通过调用微博开放平台的接口,获取微博用户及其相应的信息,进行分析后存入数据库。

(2)服务器部分接收客户端的请求,从服务器数据库或新浪平台获取数据后返回相应的数据给客户端。

(3)客户端用于数据的展示。

1)微博数据爬虫部分:

为了实现数据爬虫的功能,需要解决的问题是数据的获取,这就需要了解相关的基本的网络知识。

理解了数据传输的原理,并利用现有的开源函数库,就可以完成数据获取函数的编写。

其中,主要要处理的问题有:

(1)实现HTTP请求报文的生成

(2)实现HTTP返回报文的接收和解压

(3)实现对解压后的json文件进行分析和信息提取,如果需要入库,存入入库队列。

2)微博数据爬虫基本需求:

(1)数据信息初始化:

读取数据库中已有的信息,存入微博用户缓存队列。

为爬虫系统的运行做好准备。

(2)微博用户发现:

自动爬取获取新的微博用户信息,如果发现新的微博用户ID,则将该用户信息存入。

(3)微博信息爬取:

从微博用户队列中获取微博用户ID,然后进行微博爬取。

(4)微博用户信息更新模块:

对数据库中的微博用户信息中的微博数,关注数,粉丝数进行更新。

(5)关注列表信息更新:

定期的对关注列表的微博数,总评论数,总转发数等数据。

(6)微博用户信息入库。

将等待入库的数据容器里的数据存入数据库。

(7)微博信息入库。

将等待入库的数据容器里的数据存入数据库。

(8)微博用户标签入库。

将等待入库的数据容器里的数据存入数据库。

(9)数据更新。

当数据库已存在的该数据是,对数据进行更新。

2)服务器部分:

(1)命令接收及处理:

接收客户的请求,并从数据库和微博平台中获取信息并返回给客户端。

新增的关注微博用户的微博爬取:

(2)当客户端新增了微博用户的关注时,进行数据爬取。

微博信息入库。

3)客户端部分:

(1)登录模块:

(2)新用户注册模块:

(3)通过邮箱获取注册验证码进行注册。

(3)忘记密码模块:

(4)向注册邮箱发送用户名和密码。

(5)用户关注的微博用户列表查询。

(6)获取关注列表的详细信息。

(7)查询数据库中的用户标签分类后产生的数据:

(8)通过标签类别和拟合度两个参数向服务器请求信息。

(9)微博用户模糊联想搜索:

(10)通过微博平台的联想搜索接口查询数据。

(11)发布微博并对列表框的微博账号进行@。

2.1.3系统总体功能设计

1)爬虫系统流程如图2-1所示:

图2-1爬虫系统流程图

2)接口调用处理流程如图2-2所示:

图2-2数据接口调用流程图

3)服务器流程如图3-3所示:

图2-3服务器流程图

4)客户端流程图如图2-4所示:

图2-4客户端流程图

2.2系统数据库构建

2.2.1数据库设计

系统采用oracle11g数据库。

数据库名称weibo。

数据库weibo包含5个表:

1)USER_TABLE,用于存储注册用户信息;

2)WEIBO_USER_FOCUS_LIST,用于存储用户的微博用户关注列表;

3)WEIBO_USER_INFO,用于存储微博用户信息;

4)WEIBO_WEIBO_INFO用于存储微博信息;

5)TABLEKEYS_INFO用于存储微博用户标签信息.

2.2.2数据库详细设计

1)WEIBO_WEIBO_INFO表主键为ID字段,USERID字段为外键,并为ID字段,USERID字段建立索引。

表结构如图2-5所示:

图2-5WEIBO_WEIBO_INFO表结构图

2)WEIBO_USER_INFO表主键为ID字段,ID字段,SCREEN_NAME字段建立索引。

表结构如图2-6所示:

图2-6WEIBO_USER_INFO表结构图

3)WEIBO_USER_FOCUS_LIST表ID字段为外键,表结构如图2-7所示:

图2-7WEIBO_USER_FOCUS_LIST表结构图

4)USER_TABLE表结构如图2-8所示:

图2-8USER_TABLE表结构图

5)TABLEKEYS_INFO表主键为USERID字段,表结构如图2-9所示:

图2-9TABLEKEYS_INFO表结构图

3系统详细设计与实现

详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是经过这个阶段的设计工作,应该得出对目标系统的精确描述,并使之后的编码阶段根据此说明可以实现系统的大部分功能。

3.1爬虫系统详细设计

3.1.1HTTP请求数据包

为了实现获取新浪微博平台的数据,必须向新浪微博服务器发送数据请求报文进行数据请求。

因此,我构造了一个PostData类,用于生成http包的字符串。

HTTP报文格式:

一个HTTP请求报文由状态行(requestline)、首部行(header)、空行和请求数据4个部分组成,请求报文的一般格式如图3-1所示:

图3-1HTTP报文格式图

利用HTTPWatch抓取在浏览器中收取新浪微博数据时发送的HTTP数据包,HttpWatch抓取的数据包内容如图3-2所示:

图3-2HTTP数据包

经过分析,可以知道请求方法为POST,请求的

url地址为

Accept-Encoding为gzip,deflate。

请求数据为一个以apiurl开头的字符串。

Apiurl之后请求数据由一下几个部分组成:

接口url,请求类型,请求参数,access_token等组成。

3.1.2HTTP返回数据包

每向发送一个HTTP请求数据包后,都可以获得相应的数据包。

分析获取HTTP应答报文中的Conten-Length参数可以获取数据长度。

知道了数据长度后用zlib库的函数对数据进行解压。

当然,数据并不是每一次都是正确,导致数据出错的原因有很多,但我们只要判断数据格式是否正确,当数据格式不正确或不完整时,将直接丢弃报文,打印数据格式错误信息。

3.1.3数据分析与提取

将得到的json字符串,利用提取json数据的函数库对字符串进行处理和提取我们需要的字段内容。

3.1.4AnaData类

AnaData类结构如图3-3所示:

图3-3AnaData类结构图

这是爬虫系统的最主要的类,该类对发送请求报文,分析应答报文,数据分析和提取等各个功能函数进行了整合和封装。

在该类中,以do开头的方法为爬虫函数,用于调用Start函数获取数据,并将需要入库的数据转存到入库缓存容器中。

以Start开头的方法为数据获取和分析函数,用于设置参数从新浪服务器获取数据并调用ana函数分析数据。

以ana开头的方法为数据分析函数,用于从start获得的m_data数据流中提取数据并存于weiboMessageList或weiboUserList容器中。

类中的各个方法和字段协调合作,完成数据爬取分析和存储。

以下是几个do函数实现的功能介绍:

doUserWeibo()对微博用户ID列表的微博进行爬取,获取微博信息并进行标签归类。

doRunning()微博用户ID发现,获取微博用户的详细信息。

doUserCounts()对微博用户信息的更新。

3.1.5数据入库

入库函数包括了微博用户入库(StoreToUserDB),微博用户更新(UpdateUserDB),微博入库(storeWeiboToDB),微博用户标签入库(storeTableKey)。

每个入库函数都开启一个独立的线程。

当相应的缓存容器中的数据达到一定的数量时,对数据容器进行锁定,相应的爬虫函数暂停,开始对数据进行入库,入库后该数据从缓存容器删除,入库接收后解除锁定,继续爬虫。

下面的代码微博微博用户信息入库的函数主要代码。

voidStoreToUserDB()

{

oracledbm_oracle;

m_oracle.ConnectDB("weibo","chen","LISTENER_WEIBOORACLE");

intdatatcount=m_moniterUserList.size();//m_moniterUserList是一个map容器。

用来存储数据库已存在的微博用户信息的ID。

intdbcount=0;

while

(1)

{

cout<<"stroedbisrunning"<

Sleep(20000);//当等待入库的缓存容器为空时,入库线程进入休眠状态

if(!

weiboUserList.empty())

{

boost:

:

mutex:

:

scoped_locklock(oracledbMutex);//互斥锁,boost的互 斥锁可以自动的在析构是释放锁

for(map:

:

iterator it=weiboUserList.begin();it!

=weiboUserList.end();)

{

map:

:

iteratorfindmoniter;

findmoniter=m_moniterUserList.find(it->second.ID);//数据库中 是否有该函数

if(findmoniter==m_moniterUserList.end())

{

m_oracle.insertUserInfo(it->second);//执行oracle插入语句

MoniterUserminfo;

minfo.id=it->second.ID;

minfo.friends_count=it->second.friends_count;

minfo.lastTime=0;

minfo.isMoniter=false;

m_moniterUserList.insert(make_pair(minfo.id,minfo));

dbcount++;

datatcount++;

}

it=weiboUserList.erase(it);

if(dbcount==1000)//commit频率

{

m_oracle.CommitSql();

cout<<"allcount"<

cout<<"count"<

dbcount=0;

}

}

}

}

m_oracle.disConnectDB();

}

其他的几个入库函数与微博用户信息入库类似。

3.2服务端详细设计

1)监听线程:

服务器运行时启动监听线程,当发现客户端有请求命令时,对请求命令进行解析,并进行相应的操作。

服务器与客户端数据传输采用UDP协议,因为客户端发送的请求命令的数据长度相对较小,而且客户端与服务器不需要建立可靠连接。

这样,使用UDP协议,可以极大的提高数据的传输速度,并大大的降低服务器的压力。

Select函数可以实现socket的非阻塞方式进行工作。

一般初学socket的人都不使用select函数,认为使用send和recv就可以实现socket的功能了。

但是,作为一个网络程序,必须使用select才是合格的网络程序。

通过使用select,就可以是UDP就可以基本实现TCP的功能,当客户端没有收到服务器返回的命令时,可以根据需要是否重发操作命令或者直接放弃操作,不重发数据包。

客户端向服务器请求的命令字符串包括三个部分:

cmd字段,type字段和data字段。

前两个字段用来确定命令的类型,data为命令的参数。

2)客户端向服务器命令执行函数及其功能:

showweibo :

获取微博信息

showtablekeys :

获取标签分类

showfocusana :

获取关注的微博用户的分析统计信息

showfocusList :

获取用户关注的微博用户列表

showsearchuser :

获取模糊搜索信息

Postnormalweibo :

发布微博

cancelfocus :

用户取消关注微博用户

addfocus :

用户增肌微博用户关注

login :

登录

reg :

注册

forget :

忘记密码

3)关注微博用户信息获取:

为了使客户端新增的关注微博用户的信息及时的入库,在服务器端增加一个信息获取函数和一个入库函数。

4)服务器端与客户端的数据传输格式:

数据格式类似于xml格式,在每一个数据字段的头部和尾部都添加了一个字段名作为标记位。

3.3客户端详细设计

3.3.1登录页面

登录页面如图3-4所示

图3-4登录页面

3.3.2注册新用户和忘记密码页面

注册页面如图3-5所示:

图3-5注册新用户界面

1)随机验证码的生成:

通过获取当前的格林时间,生成随机数。

2)邮箱验证功能:

邮箱验证功能是一个可以防止无限注册账号的解决方法,而且通过注册邮箱,当用户忘记密码时,可以很轻松的通过邮箱获取用户登录信息。

SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输最常用的协议,它是基于TCP服务的应用层协议

用户注册时必须填写正确的邮箱,才能收到邮件获得验证码,从而进行注册。

该功能用到了CSendMail类,CSendMail是一个通过socket与邮箱服务器建立连接,通过SMTP协议,发送SMTP数据报文通过设置的邮箱账号和密码,发送相应的登录验证报文,成功实现邮件的发送。

3忘记密码功能:

当用户忘记密码时,只要输入注册邮箱,发送请求给服务端,服务器查询数据库,当USER_TABLE有该邮箱的注册信息时,获取该邮箱的用户名和密码,发送用户信息给该邮箱。

忘记密码界面如图3-6所示:

图3-6忘记密码界面

3.3.3用户关注列表查询界面

获取该登录用户关注的微博用户的信息,包括昵称,关注数,粉丝数。

当用户双击某行的数据是,弹出数据详情对话框,可以查看该微博用户的总发布的微博数,及所有微博的总评论数和总转发数。

并可以查看该用户各个时段发布微博的数量的直方图。

可以非常容易的看出该微博用户使用新浪微博的规律。

下面是该按钮控件的单击响应函数。

voidMainWin:

:

OnBnClickedButton1()

{

isFocus=true;

//生成请求数据包

chartemp[128];

sprintf(temp,"cmd:

show;type:

focusList;date:

%s;",login_name);

stringstr;

m_clien

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2