kl800.com省心范文网

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





摘 要 ............................................................................................................................................................. I Abstract .........................................................................................................................II 矚慫润厲钐瘗睞枥庑赖。 1 引言 .......................................................................................................................... 3 聞創沟燴鐺險爱氇谴净。 1.1 选题背景与意义........................................................................................... 3 残骛楼諍锩瀨濟溆塹籟。 1.2 系统开发工具............................................................................................... 3 酽锕极額閉镇桧猪訣锥。 1.2.1 vs 2008............................................................................................. 3 彈贸摄尔霁毙攬砖卤庑。 1.2.2 oracle 11g....................................................................................... 3 謀荞抟箧飆鐸怼类蒋薔。 1.2.3 boost 库............................................................................................ 3 厦礴恳蹒骈時盡继價骚。 1.2.4 GZIP 压缩算法函数库 ...................................................................... 3 茕桢广鳓鯡选块网羈泪。 1.2.5 JSON 格式文件转换函数库 .............................................................. 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.1 HTTP 请求数据包............................................................................ 12 驅踬髏彦浃绥譎饴憂锦。 3.1.2 HTTP 返回数据包............................................................................ 13 猫虿驢绘燈鮒诛髅貺庑。 3.1.3 数据分析与提取............................................................................. 13 锹籁饗迳琐筆襖鸥娅薔。 3.1.4 AnaData 类...................................................................................... 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 发布微博并@列表框中的微博用户昵称 ....................................... 21 阌擻輳嬪諫迁择楨秘騖。 3.3.5 微博用户昵称模糊搜索................................................................. 21 氬嚕躑竄贸恳彈瀘颔澩。 3.3.6 微博用户微博查询......................................................................... 21 釷鹆資贏車贖孙滅獅赘。 4 系统部署与测试 .................................................................................................... 22 怂阐譜鯪迳導嘯畫長凉。 4.1 系统部署图 ................................................................................................ 22 谚辞調担鈧谄动禪泻類。 4.2 系统测试 .................................................................................................... 22 嘰觐詿缧铴嗫偽純铪锩。 5 结束语 .................................................................................................................... 30 熒绐譏钲鏌觶鷹緇機库。 参考文献 .................................................................................................................... 31 鶼渍螻偉阅劍鲰腎邏蘞。 致谢 ............................................................................................................................ 32 纣忧蔣氳頑莶驅藥悯骛。

-1-





随着互联网信息技术的发展,在这个信息时代,数据量的增长速度已经远远超过的 我们的想象。迅速的对这些数据进行处理,进行信息的提取已经成为目前计算机领域一 个巨大的难题。而且无论是政府还是企业,对于大数据的掌握都可以起着至关重要的作 用。数据处理技术蕴含的巨大的商业价值必将被慢慢的挖掘出来。颖刍莖蛺饽亿顿裊赔泷。 本文以新浪微博作为信息载体。对新浪微博的用户信息进行收集和分析,对新浪微 博信息数据转化成价值的可行性进行了尝试。设计出了一个可以获取新浪微博信息的数 据收集系统,并进行一定的数据分析和数据展示。濫驂膽閉驟羥闈詔寢賻。 关键词:C++,新浪微博,数据挖掘

-I-

Abstract
With the Internet development of information technology, in this age of information, the amount of data 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 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 analysis and data presentation.銚銻縵哜鳗鸿锓謎諏涼。 Keywords: c++ ,Sina Weibo,Data Mining

-II-

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.1 vs 2008 1.2.2 oracle 11g 1.2.3 boost 库 Boost 库是一个可移植、提供源代码的 C++库,作为标准库的后备,是 C++标准化进 程的发动机之一。 Boost 库有些内容有望成为下一代 C++标准库内容。甚至替代现在的 STL 库。 boost 库在多线程处理上具有更多的优势, 可以在 linux 和 window 系统中使用 而不用修改代码,除了强大的可移植性,boost 在运行中也具有极大的稳定性,因为加 入了智能指针的概念,提高了开发效率。[3]绽萬璉轆娛閬蛏鬮绾瀧。 1.2.4 GZIP 压缩算法函数库 从新浪接口获取的数据数经过 gzip 压缩加密的数据,进行解压后即可获得 json 文 件格式的数据。
-3-

GZIP 最早由 Jean-loup Gailly 和 Mark Adler 创建,最初用于 UNIX 系统的文件压 缩。而现今它已经成为 Internet 上使用非常普遍的一种数据压缩格式,或者说一种文 件格式,可以很好的对数据进行压缩。骁顾燁鶚巯瀆蕪領鲡赙。 GZIP 编码是可以很好的提高 WEB 应用程序的性能。 大流量的 WEB 站点常常使用 GZIP 压缩技术来让用户感受更快的速度。当访问服务器中的网站时,服务器将网页内容压缩 在进行传输,一般对纯文本内容可压缩到原大小的 40%.[4]瑣钋濺暧惲锟缟馭篩凉。 1.2.5 JSON 格式文件转换函数库 因为新浪微博的数据接口格式为 json。为了获取微博数据,必须从 JSON 数据里面 提取需要的信息。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON 采用完 全独立于语言的文本格式,JSON 是一种理想的数据交换语言。易于人阅读和编写,同时 [5] 也易于机器解析和生成。 鎦诗涇艳损楼紲鯗餳類。

-4-

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)微博信息爬取:
-5-

从微博用户队列中获取微博用户 ID,然后进行微博爬取。 (4)微博用户信息更新模块: 对数据库中的微博用户信息中的微博数,关注数,粉丝数进行更新。 (5)关注列表信息更新: 定期的对关注列表的微博数,总评论数,总转发数等数据。 (6)微博用户信息入库。 将等待入库的数据容器里的数据存入数据库。 (7)微博信息入库。 将等待入库的数据容器里的数据存入数据库。 (8)微博用户标签入库。 将等待入库的数据容器里的数据存入数据库。 (9)数据更新。 当数据库已存在的该数据是,对数据进行更新。 2)服务器部分: (1)命令接收及处理: 接收客户的请求,并从数据库和微博平台中获取信息并返回给客户端。 新增的关注微博用户的微博爬取: (2)当客户端新增了微博用户的关注时,进行数据爬取。 微博信息入库。 3)客户端部分: (1)登录模块: (2)新用户注册模块: (3)通过邮箱获取注册验证码进行注册。 (3)忘记密码模块: (4)向注册邮箱发送用户名和密码。 (5)用户关注的微博用户列表查询。 (6)获取关注列表的详细信息。 (7)查询数据库中的用户标签分类后产生的数据: (8)通过标签类别和拟合度两个参数向服务器请求信息。 (9)微博用户模糊联想搜索: (10)通过微博平台的联想搜索接口查询数据。 (11)发布微博并对列表框的微博账号进行@。

-6-

2.1.3 系统总体功能设计 1)爬虫系统流程如图 2-1 所示:

图 2-1 爬虫系统流程图

-7-

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

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

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

图 2-3 服务器流程图
-8-

4)客户端流程图如图 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 字段, USERID 字段建立索引。表结构如图 2-5 所示:峴扬斕滾澗辐滠兴渙藺。

-9-

图 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 表结构图

-10-

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

图 2-8 USER_TABLE 表结构图

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

图 2-9 TABLEKEYS_INFO 表结构图

-11-

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

3.1 爬虫系统详细设计
3.1.1 HTTP 请求数据包 为了实现获取新浪微博平台的数据,必须向新浪微博服务器发送数据请求报文进行 数据请求。因此,我构造了一个 PostData 类,用于生成 http 包的字符串。胀鏝彈奥秘孫戶
孪钇賻。

HTTP 报文格式: 一个 HTTP 请求报文由状态行(request line) 、首部行(header) 、空行和请求数 据 4 个部分组成,请求报文的一般格式如图 3-1 所示:鳃躋峽祷紉诵帮废掃減。

图 3-1 HTTP 报文格式图

利用 HTTPWatch 抓取在浏览器中收取新浪微博数据时发送的 HTTP 数据包, HttpWatch 抓取的数据包内容如图 3-2 所示:稟虛嬪赈维哜妝扩踴粜。

-12-

图 3-2 HTTP 数据包

经过分析,可以知道请求方法为 POST ,请求的 url 地址为 http://open.weibo.com/tools/aj_interface.php。陽簍埡鲑罷規呜旧岿錟。 Accept-Encoding 为 gzip,deflate。 请求数据为一个以 apiurl 开头的字符串。 Apiurl 之后请求数据由一下几个部分组成:接口 url ,请求类型,请求参数, access_token 等组成。沩氣嘮戇苌鑿鑿槠谔應。 3.1.2 HTTP 返回数据包 每向 open.weibo.com 发送一个 HTTP 请求数据包后,都可以获得相应的数据包。分 析获取 HTTP 应答报文中的 Conten-Length 参数可以获取数据长度。知道了数据长度后 用 zlib 库的函数对数据进行解压。当然,数据并不是每一次都是正确,导致数据出错 的原因有很多,但我们只要判断数据格式是否正确,当数据格式不正确或不完整时,将 直接丢弃报文,打印数据格式错误信息。钡嵐縣緱虜荣产涛團蔺。 3.1.3 数据分析与提取 将得到的 json 字符串, 利用提取 json 数据的函数库对字符串进行处理和提取我们 需要的字段内容。 3.1.4 AnaData 类 AnaData 类结构如图 3-3 所示:

-13-

图 3-3AnaData 类结构图

这是爬虫系统的最主要的类,该类对发送请求报文,分析应答报文,数据分析和提 取等各个功能函数进行了整合和封装。懨俠劑鈍触乐鹇烬觶騮。 在该类中,以 do 开头的方法为爬虫函数,用于调用 Start 函数获取数据,并将需要 入库的数据转存到入库缓存容器中。謾饱兗争詣繚鮐癞别瀘。 以 Start 开头的方法为数据获取和分析函数,用于设置参数从新浪服务器获取数据 并调用 ana 函数分析数据。呙铉們欤谦鸪饺竞荡赚。 以 ana 开头的方法为数据分析函数, 用于从 start 获得的 m_data 数据流中提取数据
-14-

并存于 weiboMessageList 或 weiboUserList 容器中。莹谐龌蕲賞组靄绉嚴减。 类中的各个方法和字段协调合作,完成数据爬取分析和存储。 以下是几个 do 函数实现的功能介绍: doUserWeibo()对微博用户 ID 列表的微博进行爬取,获取微博信息并进行标签归 类。 doRunning()微博用户 ID 发现,获取微博用户的详细信息。 doUserCounts()对微博用户信息的更新。

3.1.5 数据入库 入库函数包括了微博用户入库(StoreToUserDB) ,微博用户更新(UpdateUserDB) , 微博入库(storeWeiboToDB) ,微博用户标签入库(storeTableKey) 。每个入库函数都 开启一个独立的线程。当相应的缓存容器中的数据达到一定的数量时,对数据容器进行 锁定,相应的爬虫函数暂停,开始对数据进行入库,入库后该数据从缓存容器删除,入 库接收后解除锁定,继续爬虫。下面的代码微博微博用户信息入库的函数主要代码。麸
肃鹏镟轿騍镣缚縟糶。

void StoreToUserDB() { oracledb m_oracle; m_oracle.ConnectDB("weibo","chen","LISTENER_WEIBOORACLE");納畴鳗吶鄖禎銣腻鰲锬。 int datatcount=m_moniterUserList.size();//m_moniterUserList 是 一 个 map 容 器。用来存储数据库已存在的微博用户信息的ID。風撵鲔貓铁频钙蓟纠庙。 int dbcount=0; while(1) { cout<<"stroe db is running"<<endl; Sleep(20000);//当等待入库的缓存容器为空时,入库线程进入休眠状态 if(!weiboUserList.empty()) { boost::mutex::scoped_lock lock(oracledbMutex);// 互斥锁 ,boost 的互 斥锁可以自动的在析构是释放锁灭嗳骇諗鋅猎輛觏馊藹。 for(map<longlong,WEIBOUSERINFOSTRUCT>::iterator it=weiboUserList.begin();it!=weiboUserList.end();)铹鸝饷飾镡閌
赀诨癱骝。

{ map<long long ,MoniterUser>::iterator findmoniter; findmoniter=m_moniterUserList.find(it->second.ID);// 数 据 库 中 是否有该函数 攙閿频嵘陣澇諗谴隴泸。 if(findmoniter==m_moniterUserList.end()) { m_oracle.insertUserInfo(it->second);//执行oracle插入语句
-15-

MoniterUser minfo; minfo.id=it->second.ID; minfo.friends_count=it->second.friends_count; minfo.lastTime=0; minfo.isMoniter=false; m_moniterUserList.insert(make_pair<long long,MoniterUser >(minfo.id,minfo));趕輾雏纨颗锊讨跃满賺。 dbcount++; datatcount++; } it=weiboUserList.erase(it); if(dbcount==1000)//commit频率 { m_oracle.CommitSql(); cout<<"all count"<<datatcount<<endl; cout<<"count"<<dbcount<<endl; dbcount=0; } } } } m_oracle.disConnectDB(); } 其他的几个入库函数与微博用户信息入库类似。

3.2 服务端详细设计
1)监听线程: 服务器运行时启动监听线程,当发现客户端有请求命令时,对请求命令进行解析, 并进行相应的操作。 服务器与客户端数据传输采用 UDP 协议,因为客户端发送的请求命令的数据长度相 对较小,而且客户端与服务器不需要建立可靠连接。这样,使用 UDP 协议,可以极大的 提高数据的传输速度,并大大的降低服务器的压力。夹覡闾辁駁档驀迁锬減。 Select 函数可以实现 socket 的非阻塞方式进行工作。一般初学 socket 的人都不使 用 select 函数,认为使用 send 和 recv 就可以实现 socket 的功能了。但是,作为一个 网络程序,必须使用 select 才是合格的网络程序。视絀镘鸸鲚鐘脑钧欖粝。 通过使用 select,就可以是 UDP 就可以基本实现 TCP 的功能,当客户端没有收到服 务器返回的命令时, 可以根据需要是否重发操作命令或者直接放弃操作, 不重发数据包。
-16-

偽澀锟攢鴛擋緬铹鈞錠。

客户端向服务器请求的命令字符串包括三个部分: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 所示

-17-

图 3-4 登录页面

3.3.2 注册新用户和忘记密码页面
注册页面如图 3-5 所示:

图 3-5 注册新用户界面

1)随机验证码的生成: 通过获取当前的格林时间,生成随机数。 2)邮箱验证功能: 邮箱验证功能是一个可以防止无限注册账号的解决方法,而且通过注册邮箱,当用 户忘记密码时,可以很轻松的通过邮箱获取用户登录信息。騅憑钶銘侥张礫阵轸蔼。 SMTP-简单邮件传输协议(SimpleMailTransferProtocol) ,是定义邮件传输最常用 的协议,它是基于 TCP 服务的应用层协议疠骐錾农剎貯狱颢幗騮。

-18-

用户注册时必须填写正确的邮箱,才能收到邮件获得验证码,从而进行注册。 该功能用到了 CSendMail 类, CSendMail 是一个通过 socket 与邮箱服务器建立连接, 通过 SMTP 协议,发送 SMTP 数据报文通过设置的邮箱账号和密码,发送相应的登录验证 报文,成功实现邮件的发送。镞锊过润启婭澗骆讕瀘。 3 忘记密码功能: 当用户忘记密码时,只要输入注册邮箱,发送请求给服务端,服务器查询数据库, 当 USER_TABLE 有该邮箱的注册信息时,获取该邮箱的用户名和密码,发送用户信息给 该邮箱。榿贰轲誊壟该槛鲻垲赛。
忘记密码界面如图 3-6 所示:

图 3-6 忘记密码界面

3.3.3 用户关注列表查询界面 获取该登录用户关注的微博用户的信息,包括昵称,关注数,粉丝数。当用户双击 某行的数据是,弹出数据详情对话框,可以查看该微博用户的总发布的微博数,及所有 微博的总评论数和总转发数。并可以查看该用户各个时段发布微博的数量的直方图。可 以非常容易的看出该微博用户使用新浪微博的规律。下面是该按钮控件的单击响应函 数。邁茑赚陉宾呗擷鹪讼凑。 void MainWin::OnBnClickedButton1() { isFocus=true; //生成请求数据包 char temp[128]; sprintf(temp,"cmd:show;type:focusList;date:%s;",login_name);嵝硖贪塒廩袞悯倉華
糲。

string str; m_client.sendTo(temp);//向服务器请求数据 str=m_client.recvFrom();//获取数据 int i=0; if(str.length()>0)//成功获取数据时 { //初始化列表框控件
-19-

m_listctr.DeleteAllItems(); while(comnNum>=0) { m_listctr.DeleteColumn(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(str.compare("emptyFocusList")==0) { return; } //显示数据 vector<WEIBOUSERINFOSTRUCT> listboxUserInfo; 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=str.find("\r\n")+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 微博用户标签分类查询 通过选择标签类别和拟合度两个参数,向服务器请求信息,服务器从数据库中获取 信息后返回给客户端相应的微博用户 ID,昵称,粉丝数和关注数。惬執缉蘿绅颀阳灣熗鍵。

-20-

3.3.4 发布微博并@列表框中的微博用户昵称 当使用客户端的其他功能获取到许多微博用户之后,用户可以在文本框中填写相应 的内容,单击该请求按钮之后,客户端会提取列表框的微博用户昵称,与文本框的内容 结合后,经过 URLEncode 编码,转换成微博文本,向服务器请求该微博文本的发布。贞
廈给鏌綞牵鎮獵鎦龐。

UrlEncode 编码: 因为该请求指令涉及到用户的输入, 对于用户的输入, 必须进行转码处理, UrlEncode 可以对用户输入的中文字符和其他特殊的标点符号转换成%的字符串。发送 Postnormalweibo 请求,发送微博。嚌鲭级厨胀鑲铟礦毁蕲。 3.3.5 微博用户昵称模糊搜索 微博用户的模糊搜索是新浪提供的一个接口,可以用来快速的搜索具有较高影响力 的微博用户 ID。发送 showsearchuser 请求,获取模糊搜索的数据。薊镔竖牍熒浹醬籬铃騫。 3.3.6 微博用户微博查询 当数据列表框里面又微博用户信息时,双击该行数据,发送 showweibo 请求,将可 以查看该微博用户最新发布的五十条微博。齡践砚语蜗铸转絹攤濼。

-21-

4 系统部署与测试
4.1 系统部署图
系统的爬虫部分和服务端部分运行于一台服务器上,并有数据库服务器与同一个内 网中,客户端通过万维网访问本系统,系统部署结构如图 4-1 所示:绅薮疮颧訝标販繯轅赛。

图 4-1 系统部署图

4.2 系统测试
软件测试是系统质量保证的主要活动之一。 在开发本系统时,为了使本系统能稳定的运行,对本系统进行了有针对性的全面测 试: 1、数据爬虫部分测试:
-22-

启动爬虫程序, 开始进行微博用户信息和微博信息爬取, 五个小时后系统正常运行, 运行日志显示微博用户爬取了八十多万个,微博信息已经爬取了一百一十多万个。 登录数据库进行查看,图 4-2 为这五个小时内爬取到的微博用户数据信息一共有 117853 行数据,数据按主键 ID 字段升序排序,数据录入正常,各个字段数据正确。
饪箩狞屬诺釙诬苧径凛。

图 4-2 数据库数据

2、服务器与客户端的测试: 启动服务器和客户端,客户端对每一个命令接口进行操作,检测每一个功能是否能 够正常工作:
1)输入用户名和密码,点击登录按钮。若用户名和密码正确,成功登录,若密

码错误。弹出信息框,显示密码错误。如图 4-3 所示:烴毙潜籬賢擔視蠶贲粵。

-23-

图 4-3 密码错误提示
2)点击注册新用户,填入邮箱地址,成功收到邮件,邮件内包含验证码,填写

完整注册信息,若验证码正确,成功注册新账号。若信息不完整或格式错误。提示 错误。收到的邮寄格式如图 4-4 所示:鋝岂涛軌跃轮莳講嫗键。

图 4-4 注册验证码邮件

3)点击忘记密码, 填入邮箱地址, 成功收到邮件, 邮件内容包含用户名和密码。 收到的邮件如图 4-5 所示:

-24-

图 4-5 找回密码邮件

4)点击查看关注列表,显示了本登录用户关注的微博用户信息。显示结果如图 4-6 所示:

图 4-6 查看关注列表结果图 双击列表框中的信息,弹出对话框如图 4-7 所示:

-25-

图 4-7 关注用户详细信息
5)点击根据标签搜索用户。选择标签类别和拟合度。成功显示微博用户信息,

选择的拟合度越高, 显示的数量越少。 标签选择界面如图 4-8 所示:撷伪氢鱧轍幂聹諛詼庞。

图 4-8 标签选择界面

6)当列表框中有数据时,单击发布微博并@按钮,成功发布微博并实现批量@。 如图 4-9 和 4-10 所示:

-26-

图 4-9 发布微博界面

图 4-10 微博成功发布

从这两个图可以看出成功实现了提取列表框的前 5 个微博用户,并进行@。
7)单击搜索按钮,根据文本框内容进行了模糊搜索,并显示微博用户信息。如

果输入搜索“zly” ,可以获得信息如图 4-11 所示:踪飯梦掺钓貞绫賁发蘄。

-27-

图 4-11 模糊搜索结果图

8)双击列表框的数据,成功显示该微博用户的头像和最近五十条微博内容。如 图 4-12 所示:

-28-

图 4-12 微博用户详细信息界面

-29-

5 结束语
通过这次毕业设计,不仅学到了很多专业知识,而且提高了动手能力和解决实际问 题的能力,知道我要学的东西还有很多很多。深刻的知道了要想真正的完成一个系统, 比实现一个程序是难的多的,特别是对大数据的处理,为了维护系统的稳定性,需要对 数据容器进行维护,并合理的添加相应的互斥锁,这样就可以保证数据在被访问时不被 修改,防止访问内存错误的出现。婭鑠机职銦夾簣軒蚀骞。 毕业设计给我留下的不仅仅是回忆,因为它使我受到了一次用专业知识、专业技能 分析和解决问题的全面系统锻炼, 提高了我自身的价值。 巩固和运用我所学的理论知识, 在项目中锻炼,在项目中提高,遇到问题时,网上查找资料,一般都会解决的,然后将 你解决问题的过程记录下来,这也许将成为别人的学习资料,甚至,以后你也许还会遇 到这个问题,而你已经忘记了解决这个问题的方法。譽諶掺铒锭试监鄺儕泻。 当然需求总是会改动的,需求改动的原因很多,可能是原本的设计不够合理,也可 能是因为,该需求实现的技术尚无法掌握,也可能是因为硬件设备无法保证该需求的正 常运行。俦聹执償閏号燴鈿膽賾。 当然,在开发过程中,我也看到了自己的欠缺,严谨的工作态度以及较高的分析问 题和解决问题的能力,缜密的思维。深感计算机知识的浩如烟海,设计过程中单靠课堂 上学习的知识是远远不够的,还需要在有空的时候学习更多的计算机等方面知识。特别 是网络知识。比如 HTTP 报文格式,一开始我对 HTTP 报文格式是不太了解的,因此,解 决如何获取和解析数据花了较多的时间。熟悉了 HTTP 的实现原理后,便可以实现从新 浪微博的数据的获取和解析。缜電怅淺靓蠐浅錒鵬凜。

-30-

参考文献
[1] (美)陈封能,(美)斯坦巴赫,(美)库玛尔 著,范明 人 民邮电出版社(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 基础及应用 清华大学出版社逊输吴贝义鲽國鳩犹騸。 [8] 钱慎一 Oracle 11g 数据库基础与应用教程 清华大学出版社幘觇匮骇儺红卤齡镰瀉。 [9] 孙鑫、余安萍 VC++深入详解 电子工业出版社 誦终决懷区馱倆侧澩赜。 [10] Stanley B.Lippman ,Josee Lajoie Barbara E.Moo C++ Primer 人民邮电出版 社医涤侣綃噲睞齒办銩凛。

-31-

致谢
四年的大学的时光一下子就结束了,大学生活即将结束,我要感谢***大学,让我体 验了大学的美好生活。 在制作毕业设计的过程中,虽然遇到了许多的困难,但在老师和同学的帮助下,都 顺利克服了这些困难,因此我要感谢所有的老师和同学们在学习过程中给予的帮助。舻
当为遙头韪鳍哕晕糞。

尤其要感谢我的论文指导老师,***老师不厌其烦的帮助我进行论文的修改和改进。 同时,感谢所有为信息技术发展而不断努力的程序员和工程师们,在毕业设计中用到的 许许多多的技术,都是他们日以继夜不断研究而得到的成果。并无私的公开他们的研究 成果,并在网上发布源代码。而我们现在也就可以利用他们的研究成果,加入工程中, 轻松的实现其功能。极大的提高了开发效率。鸪凑鸛齏嶇烛罵奖选锯。 当然,由于我的水平还十分有限,论文还有许多不足之处,程序还有许多的 BUG。 所以,恳请各位老师和同学们指正。筧驪鴨栌怀鏇颐嵘悅废。

-32-


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

基于新浪微博的用户信息爬虫及分析毕业论文 - 目 录 摘要 ...

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

基于新浪微博的用户信息爬虫及分析 - 目 录 摘要 ...

基于Python的新浪微博爬虫研究.doc

基于 Python 设计实现了新浪微博爬虫程 序,可以根据指定的关键词获取相应的微博内容及用户信息。 关键词:新浪微博;Python;爬虫 0 引言 自 2009 年 8 月新浪推出...

基于Java的新浪微博爬虫研究与实现_论文.pdf

针 对调 用微博 API网 页版 (co n版) r 等传 统 微博 爬虫 在数 据采集 中所 存在的问 题, 设计 开发 了一个基 于Java 的采集 新浪 微博 Weibo....

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

基于新浪微博的用户信息爬虫及分析毕业论文 - 目 录 摘要 ...

新浪微博数据爬取研究_论文.pdf

基于新浪微博的上述特点,在设计微博爬虫时,需要对 [6] [5] 微博用户群的增长使得基于微博数据的社交网络分析 、 [3, 4] 网络数据挖掘 等相关研究越来越受到...

网络爬虫设计与实现毕业论文.doc

网络爬虫设计与实现毕业论文_工学_高等教育_教育专区...搜索引擎作为一个辅助人们检索信息的工具成为用户访问...研究手段和进度安排,实验方案的可行性分析和已具备的...

基于Python的新浪微博数据爬虫.pdf

基于 Python 的新浪微博数据爬虫周中华,张惠然,谢江...该工具可以实时 抓取微博中指定用户的粉丝信息 、 ...到本地硬盘上, 方便后续进一步的数据挖掘与分析 。...

-微博舆情管理平台-数据分析系统的设计与实现_毕业论文.doc

信息安全 学生姓名 毕业设计(论文)基本内容和...检索和分析模块中 都是采用基于统计和特征关键...数据采集(微博爬虫程序)功能的实现,抓取微博文本...

新浪微博用户爬虫方法.doc

新浪微博用户爬虫方法_计算机软件及应用_IT/计算机_...将需要的用户信息采集下来, 对我们分析某项微博活动...在页面右上角,打开“流程”,以展现 出“流程设计...

(完整版)网络爬虫的设计与实现毕业论文.doc

(完整版)网络爬虫的设计与实现毕业论文_工学_高等教育_教育专区。毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,课程设计,硕士论文,研究生论文 ...

基于网络爬虫的新浪微博数据获取方式研究.doc

龙源期刊网 http://www.qikan.com.cn 基于网络爬虫的新浪微博数据获取方式研究 作者:吕鹏辉 来源:《电脑知识与技术》2017 年第 33 期 摘要:随着 Web2.0 时代...

开题报告-微博舆情管理平台_数据分析系统的设计与实现.doc

信息安全 学生姓名 毕业设计(论文)基本内容和...检索和分析模块中 都是采用基于统计和特征关键...数据采集(微博爬虫程序)功能的实现,抓取微博文本...

网络爬虫的设计与实现毕业设计(论文).doc

网络爬虫的设计与实现毕业设计(论文)_工学_高等教育...搜索引擎作为一个辅助人们检索信息的工具成为用户访问...所以需要一个能基于主题搜索的满足特定需求 的网络...

毕业设计(论文)-基于JAVA的网络爬虫的设计与实现_图文.pdf

毕业设计(论文)-基于JAVA的网络爬虫的设计与实现_工学_高等教育_教育专区。 您的评论 发布评论 用户评价 感谢分享,毕业设计(论文)-基于JAVA的网络爬虫的设计与...

新浪微博毕业论文.doc

新浪微博毕业论文_计算机软件及应用_IT/计算机_专业资料。基于Android 系统的新浪...微博浏览模块,进入浏览微博的详细页面, 用户可以评论微博和转发微博。 用户信息...

基于数据挖掘的微博人气用户特征分析与研究.doc

基于数据挖掘的微博人气用户特征分析与研究 - 基于数据挖掘的微博人气用户特征分析与研究 摘要:通过网络爬虫新浪微博站点上爬取人气百强用户信息 数据,利用 ...

网络爬虫的设计与实现 毕业论文.doc

网络爬虫的设计与实现 毕业论文_信息与通信_工程科技...本文通过 JAVA 实现了一个基于广度优先算法的多线程...抽样爬虫程序; 采用爬行深度、页面 导入链接量分析等...

网络爬虫的设计与实现.doc

网络爬虫的设计与实现_工学_高等教育_教育专区。定向网络爬虫毕业设计,山东科技大学,网络爬虫毕业设计 山东科技大学信息学院本科毕业论文 摘 要 本课题的主要目的是...

毕设开题报告 及开题报告分析_图文.doc

学院毕业设计(论文)开题报告题 目 徐亚洲 基于 ...实时抓取微博中指定用户的粉丝信息微博正文等内容...其中介绍并分析了聚焦爬虫中的关键技术:抓取目标定义...