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

上传人:哈尼dd 文档编号:3924327 上传时间:2019-10-10 格式:DOC 页数:32 大小:1.51MB
返回 下载 相关 举报
基于新浪微博的用户信息爬虫及分析毕业论文.doc_第1页
第1页 / 共32页
基于新浪微博的用户信息爬虫及分析毕业论文.doc_第2页
第2页 / 共32页
基于新浪微博的用户信息爬虫及分析毕业论文.doc_第3页
第3页 / 共32页
基于新浪微博的用户信息爬虫及分析毕业论文.doc_第4页
第4页 / 共32页
基于新浪微博的用户信息爬虫及分析毕业论文.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

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

1、目 录摘 要IAbstractII1 引言31.1 选题背景与意义31.2 系统开发工具31.2.1 vs 200831.2.2 oracle 11g31.2.3 boost库31.2.4 GZIP压缩算法函数库31.2.5 JSON格式文件转换函数库42 系统需求分析与设计52.1 系统需求52.1.1 名词说明52.1.2 系统功能需求说明52.1.3 系统总体功能设计72.2 系统数据库构建92.2.1 数据库设计92.2.2 数据库详细设计93 系统详细设计与实现123.1 爬虫系统详细设计123.1.1 HTTP请求数据包123.1.2 HTTP返回数据包133.1.3 数据分析与提

2、取133.1.4 AnaData类133.1.5 数据入库153.2服务端详细设计163.3客户端详细设计173.3.1 登录页面173.3.2 注册新用户和忘记密码页面183.3.3 用户关注列表查询界面193.3.4 微博用户标签分类查询203.3.4 发布微博并列表框中的微博用户昵称203.3.5 微博用户昵称模糊搜索213.3.6 微博用户微博查询214 系统部署与测试224.1 系统部署图224.2 系统测试225 结束语29参考文献30致谢31-31-摘 要随着互联网信息技术的发展,在这个信息时代,数据量的增长速度已经远远超过的我们的想象。迅速的对这些数据进行处理,进行信息的提取已

3、经成为目前计算机领域一个巨大的难题。而且无论是政府还是企业,对于大数据的掌握都可以起着至关重要的作用。数据处理技术蕴含的巨大的商业价值必将被慢慢的挖掘出来。本文以新浪微博作为信息载体。对新浪微博的用户信息进行收集和分析,对新浪微博信息数据转化成价值的可行性进行了尝试。设计出了一个可以获取新浪微博信息的数据收集系统,并进行一定的数据分析和数据展示。 关键词:C+,新浪微博,数据挖掘AbstractWith the Internet development of information technology, in this age of information, the amount of da

4、ta growth has far exceeded our imagination. Rapid processing of these data, the extraction of information has become a huge problem in the computer field. And whether government or corporate, can grasp for big data plays a vital role. The tremendous commercial value of data processing technology is

5、bound to be slowly excavated.In this paper, Sina Weibo as an information carrier. Sina Weibo user information collection and analysis the Sina microblogging data into the value of the feasibility of a try. Design one can get the the Sina microblogging information system of data collection and data a

6、nalysis and data presentation.Keywords: c+ ,Sina Weibo,Data Mining1 引言1.1 选题背景与意义随着互联网信息技术的发展,目前的信息增长的速度已经进入了飞速膨胀的阶段。“如果说IBM的主机拉开了信息化革命的大幕,那么大数据才是第3次浪潮的华彩乐章。”著名未来学家、当今世界最具影响力的社会思想家之一托夫勒在第三次浪潮中说过的内容如今已将逐渐成为事实,大数据正在改变这我们的生活。IDC(国际数据公司)在2011年6月的数据统计1,全球数据量在2011年已达到1.8ZB,在过去5年时间里数据量增加了5倍。1.8ZB是什么样的概念?1Z

7、B等于1万亿GB,1.8ZB也就相当于18亿个1T的硬盘。有效的对这些数据处理,去噪和提取信息,将数据转换成价值的技术已成为目前市场最为广阔的研究课题。例如数据挖掘,分布式计算,机器学习等等新的信息技术的产生,他们目的都是为了能够从这无比巨大的数据中,获取能够用于商业决策和企业管理的信息2。新浪微博于2009年正式上线,至2010年11月,新浪召开首届微博开发者大会时披露其微博用户突破5000万。2011年3月,新浪CEO曹国伟在发布财报时介绍称,其微博的注册用户总数已超过1亿。目前,新浪微博用户量已达到5亿。因此,新浪微博的数据具有极大的开发潜力。新浪微博数据平台是一个良好的数据载体。除了足

8、够大的数据量,相比与腾讯QQ空间,百度贴吧等,新浪微博还具有其他一些优点,如:1)具有一定的实名制,一些社会名人的加入提高了微博的影响力。2)可追寻的关系链。3)具有极快速的传播能力。因此,我选择了新浪微博作为爬虫进行用户分析的数据载体。 1.2 系统开发工具1.2.1 vs 2008 1.2.2 oracle 11g1.2.3 boost库Boost库是一个可移植、提供源代码的C+库,作为标准库的后备,是C+标准化进程的发动机之一。 Boost库有些内容有望成为下一代C+标准库内容。甚至替代现在的STL库。boost库在多线程处理上具有更多的优势,可以在linux 和window系统中使用而

9、不用修改代码,除了强大的可移植性,boost在运行中也具有极大的稳定性,因为加入了智能指针的概念,提高了开发效率。31.2.4 GZIP压缩算法函数库从新浪接口获取的数据数经过gzip压缩加密的数据,进行解压后即可获得json文件格式的数据。 GZIP最早由Jean-loup Gailly和Mark Adler创建,最初用于UNIX系统的文件压缩。而现今它已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式,可以很好的对数据进行压缩。GZIP编码是可以很好的提高WEB应用程序的性能。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。当访问服务器中的网站

10、时,服务器将网页内容压缩在进行传输,一般对纯文本内容可压缩到原大小的40%.41.2.5 JSON格式文件转换函数库因为新浪微博的数据接口格式为json。为了获取微博数据,必须从JSON数据里面提取需要的信息。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,JSON是一种理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。52 系统需求分析与设计2.1 系统需求2.1.1 名词说明1)微博用户信息:指的是新浪微博的用户的ID、粉丝数、关注数、注册时间等信息、2)微博信息:指的是微博用户发布的微博的I

11、D、内容、发布时间,评论数,转发数等信息。3)用户:指的是使用本系统的用户。2.1.2 系统功能需求说明微博开放平台是一个基于新浪微博客系统的开放的信息订阅、分享与交流平台。微博开放平台提供了海量的微博信息、粉丝关系、以及随时随地发生的信息裂变式传播渠道。系统分成三个部分:数据爬虫,服务器端,客户端。(1)数据爬虫通过调用微博开放平台的接口,获取微博用户及其相应的信息,进行分析后存入数据库。(2)服务器部分接收客户端的请求,从服务器数据库或新浪平台获取数据后返回相应的数据给客户端。(3)客户端用于数据的展示。1)微博数据爬虫部分:为了实现数据爬虫的功能,需要解决的问题是数据的获取,这就需要了解

12、相关的基本的网络知识。理解了数据传输的原理,并利用现有的开源函数库,就可以完成数据获取函数的编写。其中,主要要处理的问题有:(1)实现HTTP请求报文的生成(2)实现HTTP返回报文的接收和解压(3)实现对解压后的json文件进行分析和信息提取,如果需要入库,存入入库队列。2)微博数据爬虫基本需求:(1)数据信息初始化:读取数据库中已有的信息,存入微博用户缓存队列。为爬虫系统的运行做好准备。(2)微博用户发现:自动爬取获取新的微博用户信息,如果发现新的微博用户ID,则将该用户信息存入。(3)微博信息爬取:从微博用户队列中获取微博用户ID,然后进行微博爬取。(4)微博用户信息更新模块:对数据库中

13、的微博用户信息中的微博数,关注数,粉丝数进行更新。(5)关注列表信息更新:定期的对关注列表的微博数,总评论数,总转发数等数据。(6)微博用户信息入库。将等待入库的数据容器里的数据存入数据库。(7)微博信息入库。将等待入库的数据容器里的数据存入数据库。(8)微博用户标签入库。将等待入库的数据容器里的数据存入数据库。(9)数据更新。当数据库已存在的该数据是,对数据进行更新。2)服务器部分:(1)命令接收及处理:接收客户的请求,并从数据库和微博平台中获取信息并返回给客户端。新增的关注微博用户的微博爬取:(2)当客户端新增了微博用户的关注时,进行数据爬取。微博信息入库。3)客户端部分:(1)登录模块:

14、(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)客户端

15、流程图如图2-4所示:图2-4 客户端流程图2.2 系统数据库构建2.2.1 数据库设计系统采用oracle 11g数据库。数据库名称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字

16、段,USERID字段建立索引。表结构如图2-5所示:图2-5 WEIBO_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-7 WEIBO_USER_FOCUS_LIST 表结构图4)USER_TABLE 表结构如图2-8所示:图2-8 USER_TABLE 表结构图5)TABLEKEYS_INFO 表主键为USERID字段,表结构如图2-9所示:图2-9

17、 TABLEKEYS_INFO 表结构图3 系统详细设计与实现详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是经过这个阶段的设计工作,应该得出对目标系统的精确描述,并使之后的编码阶段根据此说明可以实现系统的大部分功能。3.1 爬虫系统详细设计3.1.1 HTTP请求数据包为了实现获取新浪微博平台的数据,必须向新浪微博服务器发送数据请求报文进行数据请求。因此,我构造了一个PostData类,用于生成http包的字符串。HTTP报文格式:一个HTTP请求报文由状态行(request line)、首部行(header)、空行和请求数据4个部分组成,请求报文的一般格式如图3-1所示:图

18、3-1 HTTP报文格式图利用HTTPWatch抓取在浏览器中收取新浪微博数据时发送的HTTP数据包,HttpWatch抓取的数据包内容如图3-2所示:图3-2 HTTP数据包经过分析,可以知道请求方法为POST ,请求的url地址为http:/ 为gzip,deflate。请求数据为一个以apiurl开头的字符串。Apiurl之后请求数据由一下几个部分组成:接口url,请求类型,请求参数,access_token等组成。3.1.2 HTTP返回数据包每向发送一个HTTP请求数据包后,都可以获得相应的数据包。分析获取HTTP应答报文中的Conten-Length参数可以获取数据长度。知道了数据

19、长度后用zlib库的函数对数据进行解压。当然,数据并不是每一次都是正确,导致数据出错的原因有很多,但我们只要判断数据格式是否正确,当数据格式不正确或不完整时,将直接丢弃报文,打印数据格式错误信息。3.1.3 数据分析与提取将得到的json字符串,利用提取json数据的函数库对字符串进行处理和提取我们需要的字段内容。3.1.4 AnaData类AnaData类结构如图3-3所示:图3-3AnaData类结构图这是爬虫系统的最主要的类,该类对发送请求报文,分析应答报文,数据分析和提取等各个功能函数进行了整合和封装。在该类中,以do开头的方法为爬虫函数,用于调用Start函数获取数据,并将需要入库的

20、数据转存到入库缓存容器中。以Start开头的方法为数据获取和分析函数,用于设置参数从新浪服务器获取数据并调用ana函数分析数据。以ana开头的方法为数据分析函数,用于从start获得的m_data数据流中提取数据并存于weiboMessageList或weiboUserList容器中。类中的各个方法和字段协调合作,完成数据爬取分析和存储。以下是几个do函数实现的功能介绍:doUserWeibo()对微博用户ID列表的微博进行爬取,获取微博信息并进行标签归类。doRunning()微博用户ID发现,获取微博用户的详细信息。doUserCounts()对微博用户信息的更新。3.1.5 数据入库入库

21、函数包括了微博用户入库(StoreToUserDB),微博用户更新(UpdateUserDB),微博入库(storeWeiboToDB),微博用户标签入库(storeTableKey)。每个入库函数都开启一个独立的线程。当相应的缓存容器中的数据达到一定的数量时,对数据容器进行锁定,相应的爬虫函数暂停,开始对数据进行入库,入库后该数据从缓存容器删除,入库接收后解除锁定,继续爬虫。下面的代码微博微博用户信息入库的函数主要代码。void StoreToUserDB()oracledb m_oracle; m_oracle.ConnectDB(weibo,chen,LISTENER_WEIBOORAC

22、LE);int datatcount=m_moniterUserList.size();/m_moniterUserList是一个map容器。用来存储数据库已存在的微博用户信息的ID。int dbcount=0;while(1)coutstroe db is runningendl;Sleep(20000);/当等待入库的缓存容器为空时,入库线程进入休眠状态if(!weiboUserList.empty()boost:mutex:scoped_lock lock(oracledbMutex);/互斥锁,boost的互斥锁可以自动的在析构是释放锁for(map:iterator it=weibo

23、UserList.begin();it!=weiboUserList.end();)map:iterator findmoniter;findmoniter=m_moniterUserList.find(it-second.ID);/数据库中是否有该函数if(findmoniter=m_moniterUserList.end()m_oracle.insertUserInfo(it-second);/执行oracle插入语句MoniterUser minfo;minfo.id=it-second.ID;minfo.friends_count=it-second.friends_count;min

24、fo.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();coutall countdatatcountendl;coutcountdbcount0)/成功获取数据时/初始化列表框控件m_listctr.DeleteAllItems();while(comnNum=0)m_listctr.Del

25、eteColumn(comnNum-);m_listctr.InsertColumn( +comnNum, 微博ID, LVCFMT_LEFT, 160 );m_listctr.InsertColumn(+comnNum, 微博昵称, LVCFMT_LEFT, 160 );m_listctr.InsertColumn( +comnNum, 关注数, LVCFMT_LEFT, 160 );m_listctr.InsertColumn( +comnNum, 粉丝数, LVCFMT_LEFT, 160 );if(pare(emptyFocusList)=0)return;/显示数据vector li

26、stboxUserInfo;int cur=0;while(str.length()0)string s_id,s_friend_count,s_follow_count,s_screen_name,s_description;s_id=getsubstring(str,id);s_screen_name=getsubstring(str,screen_name);s_friend_count=getsubstring(str,friends_count);s_follow_count=getsubstring(str,followers_count);int lineend;lineend=

27、str.find(rn)+2;str.erase(0,lineend);m_listctr.InsertItem(cur,s_id.c_str(),0);m_listctr.SetItemText(cur,1,s_screen_name.c_str();m_listctr.SetItemText(cur,2,s_friend_count.c_str();m_listctr.SetItemText(cur,3,s_follow_count.c_str();cur+;3.3.4 微博用户标签分类查询通过选择标签类别和拟合度两个参数,向服务器请求信息,服务器从数据库中获取信息后返回给客户端相应的微博

28、用户ID,昵称,粉丝数和关注数。3.3.4 发布微博并列表框中的微博用户昵称当使用客户端的其他功能获取到许多微博用户之后,用户可以在文本框中填写相应的内容,单击该请求按钮之后,客户端会提取列表框的微博用户昵称,与文本框的内容结合后,经过URLEncode编码,转换成微博文本,向服务器请求该微博文本的发布。UrlEncode编码:因为该请求指令涉及到用户的输入,对于用户的输入,必须进行转码处理,UrlEncode可以对用户输入的中文字符和其他特殊的标点符号转换成%的字符串。发送Postnormalweibo请求,发送微博。3.3.5 微博用户昵称模糊搜索微博用户的模糊搜索是新浪提供的一个接口,可

29、以用来快速的搜索具有较高影响力的微博用户ID。发送showsearchuser请求,获取模糊搜索的数据。3.3.6 微博用户微博查询当数据列表框里面又微博用户信息时,双击该行数据,发送showweibo请求,将可以查看该微博用户最新发布的五十条微博。4 系统部署与测试4.1 系统部署图系统的爬虫部分和服务端部分运行于一台服务器上,并有数据库服务器与同一个内网中,客户端通过万维网访问本系统,系统部署结构如图4-1所示:图4-1系统部署图4.2 系统测试软件测试是系统质量保证的主要活动之一。在开发本系统时,为了使本系统能稳定的运行,对本系统进行了有针对性的全面测试:1、 数据爬虫部分测试:启动爬虫

30、程序,开始进行微博用户信息和微博信息爬取,五个小时后系统正常运行,运行日志显示微博用户爬取了八十多万个,微博信息已经爬取了一百一十多万个。登录数据库进行查看,图4-2为这五个小时内爬取到的微博用户数据信息一共有117853行数据,数据按主键ID字段升序排序,数据录入正常,各个字段数据正确。图4-2 数据库数据2、 服务器与客户端的测试:启动服务器和客户端,客户端对每一个命令接口进行操作,检测每一个功能是否能够正常工作:1) 输入用户名和密码,点击登录按钮。若用户名和密码正确,成功登录,若密码错误。弹出信息框,显示密码错误。如图4-3所示:图4-3 密码错误提示2) 点击注册新用户,填入邮箱地址

31、,成功收到邮件,邮件内包含验证码,填写完整注册信息,若验证码正确,成功注册新账号。若信息不完整或格式错误。提示错误。收到的邮寄格式如图4-4所示:图4-4注册验证码邮件3) 点击忘记密码,填入邮箱地址,成功收到邮件,邮件内容包含用户名和密码。收到的邮件如图4-5所示:图4-5找回密码邮件4) 点击查看关注列表,显示了本登录用户关注的微博用户信息。显示结果如图4-6所示:图4-6 查看关注列表结果图双击列表框中的信息,弹出对话框如图4-7所示:图4-7 关注用户详细信息5) 点击根据标签搜索用户。选择标签类别和拟合度。成功显示微博用户信息,选择的拟合度越高,显示的数量越少。标签选择界面如图4-8

32、所示:图4-8标签选择界面6) 当列表框中有数据时,单击发布微博并按钮,成功发布微博并实现批量。如图4-9和4-10所示:图4-9 发布微博界面图4-10 微博成功发布从这两个图可以看出成功实现了提取列表框的前5个微博用户,并进行。7) 单击搜索按钮,根据文本框内容进行了模糊搜索,并显示微博用户信息。如果输入搜索“zly”,可以获得信息如图4-11所示:图4-11模糊搜索结果图8) 双击列表框的数据,成功显示该微博用户的头像和最近五十条微博内容。如图4-12所示:图4-12 微博用户详细信息界面 5 结束语 通过这次毕业设计,不仅学到了很多专业知识,而且提高了动手能力和解决实际问题的能力,知道

33、我要学的东西还有很多很多。深刻的知道了要想真正的完成一个系统,比实现一个程序是难的多的,特别是对大数据的处理,为了维护系统的稳定性,需要对数据容器进行维护,并合理的添加相应的互斥锁,这样就可以保证数据在被访问时不被修改,防止访问内存错误的出现。毕业设计给我留下的不仅仅是回忆,因为它使我受到了一次用专业知识、专业技能分析和解决问题的全面系统锻炼,提高了我自身的价值。巩固和运用我所学的理论知识,在项目中锻炼,在项目中提高,遇到问题时,网上查找资料,一般都会解决的,然后将你解决问题的过程记录下来,这也许将成为别人的学习资料,甚至,以后你也许还会遇到这个问题,而你已经忘记了解决这个问题的方法。当然需求

34、总是会改动的,需求改动的原因很多,可能是原本的设计不够合理,也可能是因为,该需求实现的技术尚无法掌握,也可能是因为硬件设备无法保证该需求的正常运行。 当然,在开发过程中,我也看到了自己的欠缺,严谨的工作态度以及较高的分析问题和解决问题的能力,缜密的思维。深感计算机知识的浩如烟海,设计过程中单靠课堂上学习的知识是远远不够的,还需要在有空的时候学习更多的计算机等方面知识。特别是网络知识。比如HTTP报文格式,一开始我对HTTP报文格式是不太了解的,因此,解决如何获取和解析数据花了较多的时间。熟悉了HTTP的实现原理后,便可以实现从新浪微博的数据的获取和解析。参考文献 1 (美)陈封能,(美)斯坦巴

35、赫,(美)库玛尔著,范明等译 数据挖掘导论 人 民邮电出版社(2011-1-1) 2 (美)坎塔尔季奇著,王晓海 吴志刚译 数据挖掘:概念、模型、方法和算 法(第2版) 清华大学出版社(2013-1-1) 3 罗剑锋 Boost程序库完全开发指南:深入C+“准”标准库(修订版) 电子工业出 版社 (2012-05出版) 4 CharlesM.Kozierok TCP/IP指南(卷1):底层核心协议 人民邮电出版社 5 严蔚敏,吴伟民 数据结构(C语言版) 清华大学出版社 6(美)索尔特等著,侯普秀等译 C+高级编程(第2版) 清华大学出版社 7 金百东,刘德山 C+STL基础及应用 清华大学出

36、版社 8 钱慎一 Oracle 11g数据库基础与应用教程 清华大学出版社 9 孙鑫、余安萍 VC+深入详解 电子工业出版社 10 Stanley B.Lippman ,Josee Lajoie Barbara E.Moo C+ Primer 人民邮电出版 社致谢四年的大学的时光一下子就结束了,大学生活即将结束,我要感谢*大学,让我体验了大学的美好生活。在制作毕业设计的过程中,虽然遇到了许多的困难,但在老师和同学的帮助下,都顺利克服了这些困难,因此我要感谢所有的老师和同学们在学习过程中给予的帮助。尤其要感谢我的论文指导老师,*老师不厌其烦的帮助我进行论文的修改和改进。同时,感谢所有为信息技术发展而不断努力的程序员和工程师们,在毕业设计中用到的许许多多的技术,都是他们日以继夜不断研究而得到的成果。并无私的公开他们的研究成果,并在网上发布源代码。而我们现在也就可以利用他们的研究成果,加入工程中,轻松的实现其功能。极大的提高了开发效率。当然,由于我的水平还十分有限,论文还有许多不足之处,程序还有许多的BUG。所以,恳请各位老师和同学们指正。

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1