社交网络数据采集算法设计软件工程课程设计报告Word格式文档下载.docx
《社交网络数据采集算法设计软件工程课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《社交网络数据采集算法设计软件工程课程设计报告Word格式文档下载.docx(24页珍藏版)》请在冰点文库上搜索。
-2-目录·
-3-课题研究的目的·
-1-1.1课题研究背景·
-1-
2优先抓取策略--PageRank·
-2-2.1PageRank简介·
-2-
2.2PageRank流程·
3爬虫·
-4-3.1爬虫介绍·
-4-
爬虫简介·
工作流程·
抓取策略介绍·
-5-
3.2工具介绍·
-6-
-7-
语言·
3.3实现·
-8-
3.4运转结果·
-9-
4算法部分·
-10-4.1获取数据的三种门路·
经过新浪微博模拟登录获取数据·
-10-
经过调用微博API接口获取用户微博数据·
-11-
4.2鉴于用户的共同过滤算法·
-14-
集体智慧和共同过滤·
深入共同过滤核心·
-15-
4.3算法实现·
-18-结论·
-22-参照文件·
-23-
课题研究的目的
1.1课题研究背景
互联网致使一种崭新的人类社会组织和生计模式悄悄走进我
们,建立了一个超越地球空问之上的、巨大的集体——网络集体,
21世纪的人类社会正在渐渐涌现出崭新的形态与特质,网络全世界化时代的个人正在聚合为新的社会集体。
跟着交际网站的盛行,
网络交际蓬勃发展,新的互联网热再次升温,有剖析人士甚至说,网络交际将创造人际交往的新模式。
互联网的盛行打破了传统的社会交往方式,简单、快捷和无距离的交际体验推进交际网络迅速发展,以Facebook、Twitter、微博等为代表的应用吸引了大批活跃网络用户,交际网络信息体现迸发式的增添。
交际网络信息反应了用户的网络行为特色,经过对这些信息的研究,能够实现社会舆论监控、网络营销、股市展望等。
交际网络信息的重要价值在于及时性,如何迅速、正确、有效地获取目标信息特别重要。
但交际网络属于DeepWeb的专有网络,信息量大、主题性强,传统搜寻引擎没法索引这些DeepWeb页面,只有经过网站供给的查问接口或登录网站才能接见其信息,这增添了获取交际网络信息的难度。
目前外国有关交际网络数据采集模型的研究较少,对交际网
络的研究主要集中在社会网络剖析领域。
国内交际网络平台的数据采集技术研究有必定成就,如文件提出并实现一种利用新浪微
博应用程序接口(ApplicationProgrammingInterface,API)和网络数据流相联合的方式采集数据,文件利用开发平台供给
的API实现数据采集,并经过WebBrowser和HttpFox监测信息交互时的数据包,实现动向获取Ajax页面信息等。
2优先抓取策略--PageRank
2.1PageRank简介
PageRank,即网页排名,又称网页级别、Google左边排名或
佩奇排名是Google首创人拉里·
佩奇和谢尔盖·
布林于
1997年
建立初期的搜寻系统原型时提出的链接剖析算法,自从Google
在商业上获取空前的成功后,该算法也成为其余搜寻引擎和学术
界十分关注的计算模型。
目前好多重要的链接剖析算法都是在
PageRank算法基础上衍生出来的。
2.2PageRank流程
第一PageRank的计算充足利用了两个假定:
数目假定和质
量假定。
步骤以下:
1)在初始阶段:
网页经过链接关系建立起Web图,每个页面设置相同的PageRank值,经过若干轮的计算,会获取每个页面所获取的最后PageRank值。
跟着每一轮的计算进行,网页目前的PageRank值会不停获取更新。
2)在一轮中更新页面PageRank得分的计算方法:
在一轮更新页面PageRank得分的计算中,每个页面将其目前的PageRank
值均匀分派到本页面包含的出链上,这样每个链接即获取了相应
的权值。
而每个页面将全部指向本页面的入链所传入的权值乞降,
即可获取新的PageRank得分。
当每个页面都获取了更新后的
PageRank值,就达成了一轮PageRank计算。
而后,引入阻尼系数p,p的值一般为0.85。
完好公式以下:
是被研究的页面,是链入页面的数
量,是链出页面的数目,而N是全部页面的数目。
使用幂法求PageRank。
那公式能够变换为求解的
值,此中矩阵为A=q×
P+(1一q)*/N。
P为
概率转移矩阵,为n维的全1行。
1.计算P概率转移矩阵:
1)用矩阵表示连通图
2)网页链接概率矩阵
3)概率转移矩阵P
2.计算A矩阵:
1)计算/N
2)计算A矩阵
3.循环迭代计算PageRank
3爬虫
3.1爬虫介绍
爬虫简介
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中
间,更常常被称为网页追赶者),是一种依据必定的规则,自动的
抓取万维网信息的程序或许脚本,已被宽泛应用于互联网领域。
工作流程
网络爬虫的基本工作流程以下:
(1)选用想爬取的网页的URL。
(2)将这些URL放入待爬取URL行列。
(3)依据待爬取行列中的URL获取对应的网页。
(4)剖析获取的网页,分析DNS,从中获取数据以及新
的URL,并将已经抓取的URL放入已爬取URL行列。
(5)将新的URL放入待爬取URL行列,数据输出,存入
当地下载库中。
详细流程图以下:
图3-1爬虫工作流程
抓取策略介绍
在爬虫应用中,待爬取URL行列是很重要的一部分。
待爬取行列中的URL以如何的次序爬取相同很重要,这决定这数据的获取次序。
决定待爬取行列中的URL以如何的次序爬取,这就是抓取策略。
下边介绍几种常有的抓取策略:
1.广度优先遍历策略:
广度优先遍历策略是指在抓取过程中,在达成与目前结点直接链接的结点的抓取后,才选择此中一个结点持续向下一层抓取。
这类方法的思想是以为在与初始URL在必定链接距离内的网页拥有最大的主题有关性。
这类方法的弊端是,跟着抓取网页数目的增添,大批没关网页会被下载,造成不用要的浪费。
2.深度优先遍历策略:
深度优先遍历策略是指在抓取开始,选择与目前结点相链接
的一个结点,剖析其URL,而后在选择此中一个进行抓取,这样
重复下去,直到此中一条链路抓取完成,而后再从头选择一个未
抓取的URL进行抓取。
明显这类方法的深度决定着抓取的命中率
及效率。
跟着深度的增大,命中率及效率会成倍的降落。
3.最正确优先遍历策略
最正确优先遍历算法依据必定的网页剖析算法,算出网页与初
始网页的有关性,有关性高的网页优先抓取,这样,爬虫程序只
抓取那些依据计算获取的“实用的”网页,可是这样可能致使在
抓取路径上一些有关网页被遗漏。
4.PartialPageRank策略
PartialPageRank策略借鉴了PageRank算法的思想,依据已经下载网页的URL以及待爬取URL行列,计算每个网页的PageRank值,依据值得大小进行抓取排序。
为防备部分有关网页因
PageRank值小而向来不可以被抓取,一般抓取K次后从头计算PageRank值。
因为一些新下载的网页没有PageRank值,所以将这个网页的全部入链传达的PageRank值汇总,就够成了这些页
面的PageRank值,进而参加排序。
3.2工具介绍
本爬虫的实现以及运转都是鉴于Eclipse的,Eclipse安装
Pydev插件后即配置好Python语言的开发环境,在分析模块还使
用了BeautifulSoup插件。
下边介绍主要用到的这三种工具:
Eclipse是一个开源的、鉴于Java的可扩睁开发平台。
就其本
身而言,它不过一个框架和一组服务,用于经过插件组件建立开
发环境。
本文经过安装Pydev插件建立Python语言的开发环境。
语言
Python是一种面向对象、解说型计算机程序设计语言,由
GuidovanRossum于1989年发明,第一个公然刊行版刊行于1991
年。
Python的设计哲学是“优雅、明确、简单”。
其特色是易读、
易保护以及强迫用空白符作为语句缩进,使得不好的编程习惯(例
如if语句下一行不向右缩进)都不可以经过编译。
Python拥有丰富和强盛的库,它常被称为胶水语言,能够把
用其余语言制作的各样模块(特别是C\C++)很轻松的联络在一同。
需要注意的是在使用某些扩展类库的时候可能需要考虑平台问题,
某些可能不供给跨平台的实现。
Python拥有优秀的可扩展性。
Python还能够以交互模式运转,比方主流操作系统Linux、
Mac、Windows都能够直接在命令模式下直接运转Python交互环
境。
直接下达操作指令即可实现交互操作。
Python目前已经宣布了Python3.x版本,本爬虫使用Python27编写。
BeautifulSoup是Python的一个插件,用于分析HTML和XML,
是代替正则表达式的利器,本爬虫使用BeautifulSoup4。
BeautifulSoup会产生一个DOM树,尽可能和源文档的含义内
容一致,这类举措往常能够知足采集数据的需求。
BeautifulSoup
下载地点为:
安装过程以下:
(1)下载达成后解压缩。
(2)翻开命令提示符,将工作目录切换到BS的目录下。
(3)运转setup.pybuild。
(4)运转setup.pyinstall。
(5)输入Python,进入Python模块,而后输入frombs4import
BeautifulSoup检测能否成功。
3.3实现
主要含有主调动函数、URL管理、HTML下载器、HTML解
析器、HTML输出这五个模块。
系统结构图以下:
图3-2爬虫功能结构图
下边是主要的调动函数:
frombaike_spiderimporturl_manager,html_downloader,
html_parser,html_outputer
classSpiderMain(object):
def__init__(self):
self.urls=url_manager.UrlManager()
self.downloader=html_downloader.HtmlDownloader()
self.parser=html_parser.HtmlParser()
self.outputer=html_outputer.HtmlOutputer()
defcraw(self,root_url):
count=1
try:
print'
craw%d:
%s'
%(count,new_url)
ifcount==20:
break
count=count+1
except:
carwfailed'
if__name__=="
__main__"
:
root_url="
"
obj_spider=SpiderMain()
obj_spider.craw(root_url)
3.4运转结果
本次测试爬取XX百科中Python的20条有关词条。
因为时间以及技术有限,尚不可以完满运转,爬虫在爬取到主页面
后就会停止运转,错误还没有找到,此后会尽量完美。
4算法部分
4.1获取数据的三种门路
经过新浪微博模拟登录获取数据
模拟登录功能的实现方式是读取包含账号信息的配置文件,
模拟网页登录新浪微博的过程,获取接见新浪微博页面时所需要
的有效认证信息,即需要保留在当地的cookie信息。
程序向新浪
服务器发送经过加密的用户名(username)和密码(password),服务
器从传达的URL参数中提取字符串并解密获取原用户名和密码。
此中对username和password的加密是模拟登录过程中的关
键步骤。
对username进行Base64编码获取用户名的加密结果。
但password的加密过程比较复杂。
第一利用HttpClient对象接见新浪服务器获取服务器时间(servertime)、一个随机生成的字符串
(nonce)2个参数。
而后利用新浪服务器给出的pubkey和rsakv值
创立RSA算法公钥(key)。
将servertime,nonce和password按次拼接成新的字符串message,使用key对message进行RSA加密
并将加密结果转变为十六进制,获取password的加密结果。
将加
密后的用户名和密码一同作为恳求通行证的URL恳求的报头信
息传达给新浪服务器,新浪服务器经过考证无误后,返回登录成
功信息,HttpClient保留有效的Cookies值。
模拟登录成功后,程序向服务端恳求数据获取任务,不然结
束本次任务。
经过调用微博API接口获取用户微博数据
利用微博系统的SDK获取数据的工作流程,调用API需要
经过用户身份的鉴权,目前使用OAuth鉴权。
其长处是数据正确
快捷,极少因微博平台的变化而变化,但弊端是接口供给商限制
的要素多且不稳固。
(1)新浪微博开放平台
目前,新浪微博供给了相应的API供本系统使用,经过调用
这些API,本系统能够获取如微博内容、用户关系、用户信息、
用户标签等信息。
要使用这些API,需要先创立一个自己的应用,
而后进行认证,认证达成后即可使用API获取新浪微博的数据了。
可是此刻新浪微博加大了对API接口的限制,只有企业用户
才能够申请微服务应用(里面有接见数据的接口),这对个人数据
采集的实践造成较大困难。
(2)微博JAVASDK
微博JAVASDK是新浪为JAVA开发者供给的特意用于接见
新浪微博的接口,经过微博JAVASDK,第三方微博应用能够很方便的接见微博供给的API接口,获取到需要的信息。
微博JAVA
SDK的整体架构包含以下几个:
src:
weibo4j封装了大多数接口,包含受权,timeline,用户等
常有接口;
weibo4j.http包含了https恳求的封装;
weibo4j.model包含了user,status等实体类;
达成json分析的各样方法;
weibo4j.util包含了恳求api接口时候所需要的工具类;
examples:
里面包含了封装接口的各个测试。
(3)微博应用创立
第一使用自己的新浪微博账号进行登岸,假如没有的话,就要先注册,而后再登岸到新浪的微博开放平台。
成功登岸此后,第一要填写个人的基本信息,填写了个人信息后,就能够获取开发者的身份,这时就能够创立应用了。
创立应用时,除了填写应用的基本信息,包含名称、用途、应用网址之外,最重要的是应用的种类。
站内应用能够获取更高的权限和更高的API调用频次。
创立完站内应用后,应用将会获取一个AppKey和一个SecretKey,这两个Key是此后会用到的。
此中AppKey是应用在开放平台中的身份标记,每次应用要调用API时,都需要供给AppKey和使用人账号,这样方便新浪统计某个应用的使用频次,这样既
能保证某个应用不可以屡次调用API,防止出现歹意攻击新浪的事件,另一方面,新浪也能够经过使用频次来进行热点应用的介绍。
而AppSecret是新浪微博分派给某个应用的密码,这是为了保证其真切性,这个是独一的,这样能够防备其余应用假冒某个热点
应用。
(4)微博内容获取
整体的大概流程如图4-1。
创立微博开放
平台的应用
获取Appkey
和Appsecret
OAuth2.0认证
获取Access
Token
结构相应API
的参数
API文档
信息显示与保
存
API接口代码
类
重点词般配
返回JSON数
调用API接口
据流
图4-1经过微博API接口获取数据大概流程
在采集过程中,第一需要的是获取新浪微博的身份考证,即
申请AccessToken码,进而获取对新浪微博开发的权限。
进行身
份考证此后,就能够开始对新浪微博进行开发了。
在调用API接
口Timeline获取受权用户全部的微博信息此后,就能够经过输入重点词对微博信息进行重点词般配,假如般配成功,就将微博信息中的id和微博内容显示在框架并以txt文件的形式保留下来。
因为新浪微博对API接口调用的次数和频次有限制,一旦达到限
制,系统将等候几分钟后才能进行采集。
4.2鉴于用户的共同过滤算法
集体智慧和共同过滤
集体智慧是指在大批的人群的行为和数据中采集答案,帮助你对整个人群获取统计意义上的结论,这些结论是我们在单个个体上没法获取的,它常常是某种趋向或许人群中共性的部分。
共同过滤是利用集体智慧的一个典型方法。
要理解什么是共同过滤(CollaborativeFiltering,简称CF),第一想一个简单的问题,假如你此刻想看个电影,但你不知道详细看哪部,你会怎么做?
大多数的人会问问四周的朋友,看看近来有什么漂亮的电影介绍,而我们一般更偏向于从口胃比较近似的朋友那边获取介绍。
这就是共同过滤的核心思想。
共同过滤一般是在海量的用户中发掘出一小部分和你品位比较近似的,在共同过滤中,这些用户成为街坊,而后依据他们喜爱的其余东西组织成一个排序的目录作为介绍给你。
如图4-2所示,鉴于用户的共同过滤算法表示图。
图4-2鉴于用户的共同过滤算法表示图
深入共同过滤核心
第一,要实现共同过滤,需要一下几个步骤:
采集用户偏好;
找到相像的用户或物件;
计算介绍。
(1)采集用户偏好
从用户的行为和偏好中发现规律,并鉴于此进行介绍,所以
如何采集用户的偏好信息成为系统介绍成效最基础的决定要素。
用户有好多种方式向系统供给自己的偏好信息,比方:
评分,投
票,转发,点赞,议论,珍藏,点击流,页面逗留时间等等。
用户行为都会多于一种,那么如何组合这些不一样的用户行为
呢?
基本上有以下两种方式。
(1)将不一样的行为分组
一般能够分为点赞和议论、转发,而后鉴于不一样的用户行为,
计算不一样用户或许物件的相像度。
(2)不一样行为产生的用户爱好对它们进行加权
对不一样行为产生的用户爱好进行加权,而后求出用户对物件
的整体爱好。
好了,当我们采集好用户的行为数据后,还要对数据进行预
办理,最核心的工作就是减噪和归一化。
减噪:
因为用户数据在使用过程中可能存在大批噪音和误操
作,所以需要过滤掉这些噪音。
归一化:
不一样行为数据的取值相差可能很好,比如用户的查
看数据必定比购置数据大得多。
经过归一化,才能使数据更为准
确。
(2)找到相像的用户或物件
当已经对用户行为进行剖析获取用户爱好后,我们能够依据
用户爱好计算相像用户和物件,而后鉴于相像用户或许物件进行
介绍。
对于相像度的计算,现有的几种基本方法都是鉴于向量
(Vector)的,其实也就是计算两个向量的距离,距离越近相像度越
大。
在介绍的场景中,在用户-物件偏好的二维矩阵中,我们可
以将一个用户对全部物件的偏好作为一个向量来计算用户之间的
相像度,或许将所实用户对某个物件的偏好作为一个向量来计算
物件之间的相像度。
下边