基于微博API的分布式抓取技术
php获取新浪微博数据API的实例代码

php获取新浪微博数据API的实例代码分享下php取得新浪微博数据API的一个例子,学习下在php编程中,使用新浪微博数据API进行开发的方法,感兴趣的朋友可以参考下。
php获取新浪微博数据API要取得新浪微博的数据,可以通过其提供的API,地址:open.weibo/wiki/API文档_V2。
获取数据的方法:复制代码代码示例:<?php/***通过新浪微博数据API取得微博数据*edit:jbxue*/functiongetWeiboData(){$count=15;//参数source后面输入你的授权号$url="api.weibo/2/statuses/home_timeline.json?source=12 3456789&count=".$count."&page=1";echo$url.'<br/>';$curl=curl_init();curl_setopt($curl,CURLOPT_URL,$url);//设置是否显示header信息0是不显示,1是显示默认为0//curl_setopt($curl,CURLOPT_HEADER,0);//设置cURL参数,要求结果保存到字符串中还是输出到屏幕上。
0显示在屏幕上,1不显示在屏幕上,默认为0curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//要验*的用户名密码curl_setopt($curl,CURLOPT_USERPWD,"username:password" );$data=curl_exec($curl);curl_close($curl);$result=json_decode($data,true);echo'<pre>';print_r($result);echo'</pre>';}>说明:json_decode($data)会输出一个对象,而json_decode($data,true)则强制输出为数组。
基于网络爬虫的新浪微博数据抓取技术

1引言随着移动互联网的飞速发展,人们越来越多地在社交网络上发表自己的见解,分享自己的生活,与他人进行交流讨论。
新浪微博作为国内最大的社交平台之一,同时也成了各类消息发布的最主要渠道之一。
截至2017年9月,微博月活跃用户3.76亿,日活跃用户1.65亿,每天都有用户发布上亿条微博,评论、转发或点赞其他微博。
一个如此庞大和公开的社交平台,每天都能产生海量信息,能为各种舆情监控、商业推广分析、自然语言处理等系统提供大量的数据支持[1]。
在国外,开展了针对于Twitter和Facebook等社交平台的一系列研究,但是不同于国外的Twitter和Facebook等平台,微博官方并没有提供相关接口给人们下载与微博相关的数据集,并且微博的登录、浏览等操作都有较敏感的反爬虫机制,这给数据的采集带来了困难,对普通的想获取相关数据的人员来说是个极大的挑战。
因此,快速获得微博数据的方法就是构建一个稳定高效的爬虫抓取系统。
2网络爬虫2.1原理网络爬虫(Web Crawler),是自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站。
爬虫一般分为数据采集、处理和储存三个部分。
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL 放入队列,直到满足系统的一定停止条件。
2.2网络爬虫框架ScrapyScrapy是Python开发的一个快速、可扩展的Web抓取框架,用于抓取Web站点并从页面中提取结构化的数据。
通过Scrapy中的Spider模块,能方便地定义网址爬取和数据提取的规则。
3微博爬虫策略现在各种爬虫的搜索策略[2]主要为:深度优先搜索策略、广度优先搜索策略、非完全PageRank策略以及大站优先搜索策略。
微博跟其他普通网站相比,动态性和网页结构都比较复杂,其对于爬虫的防范也更加严格,普通的爬虫程序一般不能直接获取到相应的网页内容,但其网页内容中的数据格式较为统一。
基于微博API的分布式抓取技术

陈 舜华 ’ 。 王 晓彤 ’ , 郝 志峰 ’ , 蔡瑞初 ’ , 肖晓 军 , 卢 宇
( 1 . 广 东工业 大 学计 算机 学 院 广 州 5 1 0 0 0 6 ; 2 . 广 州优 亿信 息科 技 有 限公 司 广 州 5 1 0 6 3 0 )
C h e n S h u n h u a , Wa n g X i a o t o n g , Ha o Z h i f e n g , C a i R u i c h u , X i a o X i a o j u n , L u Y u
( 1 . S c h o o l o f C o m p u t e r s , G u a n g d o n g U n i v e r s i t y o f T e c h n o l o g y , G u a n g z h o u 5 1 0 0 0 6 , C h i n a ;
该技术的可行性 。 关键词 : 新 浪微博 ; 爬取 策略 ; 分 布式 爬 取 ; 微博 A P I
d o i : 1 0 . 3 9 6 9 6 . i s s n . 1 0 0 0 . 0 8 0 1 . 2 0 1 3 . 0 8 . 0 2 5
A Di s t r i bu t e d Da t a — Cr a wl i ng Te c hno l o g y f o r Mi c r o bl o g API
2 . G u a n g z h o u U s e e a s e I n f o r ma t i o n T e c h n o l o y g C o . , L t d . , G u a n g z h o u 5 1 0 6 3 0 , C h i n a )
几种微博数据抓取方法比较研究

为1 . 7 1 亿, 使用率为 3 0 . 7 %… 。
二 十余 类 A P I 接 口, 如图1 所示 。 通过O Au L h _ 2 . 0 用户 授 权 后 即 可调 用
P I 接 口实现 当前登录用户及其所关注用户 的最新微博的 微博 自产生以来逐渐体现出其强大的影响力,  ̄ n 2 0 1 4 年上半年 所提供 的A 获取 , 用户发布的微博的获取等 , 其一般处理过程如 图2 所示 。 的“ 马航事件 ” 和2 0 1 4年下半年的“ 冰桶挑战” 凸显 了新浪微博作为 社交媒体 的快 速的传播速 度 、 深 远的传播范 围和积极 的社 会影响
- _ f
I 数 字 拉 术
l}
应用研究
几种微博数据抓取方法比较研究
莫 诗 清 孙 同 陈 毛 平
( 南京理 工 大学泰 州科 技 学 院 江 苏泰 州 2 2 5 3 0 0 )
摘 要: 微博 ( Mi c r o B l o 曲, 即微 型博客, 是博 客的微型 化, 允许 用 户使 用最 多1 4 0 字来 向外发布 消息, 实现 即时共 享。 we b 2 . 0 时代 微博 已成为 重要的 网 络信 息 来源, 充 分利 用微博信 息对舆 ・ 睛观测 、 情 感倾 向分析 、 热 点识 别等具 有重要 意义, 如何 快速 有效抓 取微 博数 据成 为研 究热 点 本文分 析对 比 了 几种微 博数 据抓取 方 法并 实现 了基 于代 理【 P 的微 博数据抓 取 方法, 实验 测试表 明, 该方 法能够 比较快 速有效 地采 集新浪微 博信 息。 关键 词: 新 浪微博 信息 采集 代理I P 模拟 登 录 A P I 中图分 类号 : T N 9 1 5 . 0 8 文献标 识码 : A 文章 编号 : l 0 0 7 — 9 4 1 6 ( 2 0 1 5 ) 0 4 — 0 0 5 3 — 0 2
基于分布式计算的微博敏感信息挖掘系统

■ d o i : 1 0 3 9 6 9 / j i s s n 1 6 7 1 ・ 1 1 2 2 2 0 1 3 0 9 . 0 1 8
基于 分布 式 计算 的微博敏 感信 息 挖掘 系统
一
李声龙 ,史乔 茜,唐 瞻立 ,梁刚
(四川 大学软件 学 院,四川成都 61 0 2 0 5) 中图分类号 : T P 3 0 9 文献标识码 : A 文章编号 : 1 6 7 1 — 1 1 2 2( 2 0 1 3 ) 0 9 — 0 0 8 1 — 0 4
A M i n i n g S ys t e m f o r M i c r o bl o g S e ns i t i v e I nf o r ma t i o n ba s e d o n Di s t r i bu t e d Co m pu t i ng
将 结果 呈 现 给 用 户 以便 其及 时查 看 、处理 。 系统 首 次在 此 类 系统 中使 用基 于人 ( 即 以微博 用户 )为监 控
对 象的 概 念 。与 现 有部 分 系统 相 比 ,该 系统具 有 高 时效 性 、 高准 确 率的 优 势 。 关 键词 : 语料库 ; P a g e Ra n k; 影响力 ; Mo n g o DB ; 分布 式 计 算
摘 要 : 在 中国网络舆 情的传播 当中,微博是 最有影响力的媒介之一,对微博舆情进行有效监控刻
不容 缓 。 文章 设 计 的 系统 以微博 舆 情 为研 究 目标 ,利 用 Mo n g o D B搭 建 了分 布式 计 算 平 台 ,建 立 了敏 感 事件 话 题 语 料 库 ,引入 P a g e Ra n k算 法处 理微 博社 交关 系得 到 微 博 用 户 的影 响 力 ,并 将 高影 响 力微 博 用 户发 布 的微 博 与 语料 库 中 的 关键 词 精 确 匹配 ,进 而得 到微 博 敏 感 人 士 ,最终 以响应 式 W e b界 面 的形 式
大数据环境下的微博爬虫技术研究

大数据环境下的微博爬虫技术研究第一章前言随着大数据时代的到来,社交媒体平台中的数据量不断增加。
微博作为中国最大的社交媒体平台之一,包含着大量的用户数据和社交关系数据,成为了研究用户行为和信息传播的重要数据来源。
本文将围绕微博爬虫技术展开探讨,主要研究如何在大数据环境下高效稳定地爬取微博数据。
第二章微博爬虫概述微博爬虫是指通过程序自动化访问并获取微博数据的技术。
一般而言,微博爬虫需要实现以下功能:登录账号、搜索关键词、获取用户信息和微博内容等。
微博爬虫技术主要分为两大类:开放API爬虫和模拟登录爬虫。
前者是利用微博开放API接口进行数据获取,速度较快,但是API返回结果受到访问频率和数据量的限制。
后者需要进行模拟登录操作,可以获取更全面的数据,但是难度较大,容易被微博官方检测到。
第三章微博爬虫技术关键问题微博爬虫技术面临的关键问题主要包括反爬虫机制、数据量较大、访问频率限制等。
为了避免被微博官方封禁,需要采取反反爬策略,例如使用代理IP、设置访问间隔时间、调整访问顺序等手段。
此外,大量的数据量也给数据存储和处理带来了挑战,需要使用分布式存储和计算技术来提高效率。
第四章微博爬虫技术案例研究本章将介绍两个典型的微博爬虫案例:基于开放API的微博爬虫和基于模拟登录的微博爬虫。
前者主要运用了微博API提供的接口和数据格式,能够较为快速高效地获取微博数据。
后者则需要模拟登录操作,可以获取更全面的数据,但是也更具有挑战性。
第五章微博爬虫技术应用场景微博爬虫技术可以用于研究用户行为、社交网络分析、政治言论分析等多个领域。
例如,可以通过微博爬虫获取大量用户的社交关系数据,进而分析社交网络结构和特征;还可以结合NLP技术对微博文本进行情感分析和主题分类,从而研究公众舆情和政治言论动向等。
第六章微博爬虫技术未来发展方向随着大数据技术和云计算技术的不断发展,微博爬虫技术也会不断更新迭代。
未来的微博爬虫技术可能会更加智能化、自动化和实时化,从而更好地服务于用户需求。
基于微博数据的舆情分析及预测模型研究

基于微博数据的舆情分析及预测模型研究舆情分析是指通过对社交媒体上的舆情信息进行收集、整理和分析,从而了解公众对特定事件或话题的态度和情感趋势。
微博作为中国最大的社交媒体平台之一,拥有庞大的用户群体和丰富的信息资源,因此成为了研究舆情分析的重要数据来源。
本文将基于微博数据,探讨舆情分析的方法和预测模型。
一、微博数据的收集与整理微博数据的收集可以通过API接口进行,也可以通过网络爬虫技术获取。
对于大规模数据的收集,可以使用分布式爬虫框架进行加速。
收集到的数据需要进行预处理,包括数据清洗、去噪、分词等操作,以保证后续分析的准确性和效率。
二、舆情分析的主要方法1. 文本情感分析:通过对微博文本进行情感分类,判断其积极、消极或中性。
常见的方法包括基于词典的方法、机器学习方法和深度学习方法等。
词典方法依靠提前构建的情感词典进行词语情感打分,从而对整句的情感进行估计。
机器学习方法则是通过训练分类器,从已标注好的数据中学习情感特征,然后对未标注的数据进行情感分类。
深度学习方法则是通过神经网络模型提取文本的上下文特征,从而进行情感分类。
2. 主题挖掘:通过对微博文本进行聚类或关联规则挖掘,提取出微博数据中的热门话题或关键词。
主题挖掘可以使研究者更好地了解公众的关注点和讨论热点,从而更准确地预测舆情发展。
3. 社交网络分析:微博作为一个社交平台,用户之间的关注关系以及转发、点赞等行为会对舆情产生影响。
通过对微博用户之间的关系网络进行分析,可以揭示其对舆情的扩散和影响力。
网络分析方法包括社区检测、影响力评估等。
三、舆情预测模型舆情预测模型旨在根据历史数据的分析,预测未来舆情趋势。
常用的模型包括:1. 时间序列模型:通过对时间维度上的数据建模,来捕捉舆情的季节性或周期性变化趋势。
常见的时间序列模型包括ARIMA模型、指数平滑模型等。
2. 机器学习模型:通过对历史舆情数据进行特征提取和训练,来预测未来舆情的发展。
常用的机器学习模型包括支持向量机(SVM)、随机森林(Random Forest)等。
Python爬虫爬取新浪微博内容示例【基于代理IP】

Python爬⾍爬取新浪微博内容⽰例【基于代理IP】本⽂实例讲述了Python爬⾍爬取新浪微博内容。
分享给⼤家供⼤家参考,具体如下:⼀般做爬⾍爬取⽹站,⾸选的都是m站,其次是wap站,最后考虑PC站。
当然,这不是绝对的,有的时候PC站的信息最全,⽽你⼜恰好需要全部的信息,那么PC站是你的⾸选。
⼀般m站都以m开头后接域名,所以本⽂开搞的⽹址就是 。
前期准备1.代理IP2.抓包分析通过抓包获取微博内容地址,这⾥不再细说,不明⽩的⼩伙伴可以⾃⾏百度查找相关资料,下⾯直接上完整的代码完整代码:# -*- coding: utf-8 -*-import urllib.requestimport json#定义要爬取的微博⼤V的微博IDid='1259110474'#设置代理IPproxy_addr="122.241.72.191:808"#定义页⾯打开函数def use_proxy(url,proxy_addr):req=urllib.request.Request(url)req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")proxy=urllib.request.ProxyHandler({'http':proxy_addr})opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)urllib.request.install_opener(opener)data=urllib.request.urlopen(req).read().decode('utf-8','ignore')return data#获取微博主页的containerid,爬取微博内容时需要此iddef get_containerid(url):data=use_proxy(url,proxy_addr)content=json.loads(data).get('data')for data in content.get('tabsInfo').get('tabs'):if(data.get('tab_type')=='weibo'):containerid=data.get('containerid')return containerid#获取微博⼤V账号的⽤户基本信息,如:微博昵称、微博地址、微博头像、关注⼈数、粉丝数、性别、等级等def get_userInfo(id):url='https:///api/container/getIndex?type=uid&value='+iddata=use_proxy(url,proxy_addr)content=json.loads(data).get('data')profile_image_url=content.get('userInfo').get('profile_image_url')description=content.get('userInfo').get('description')profile_url=content.get('userInfo').get('profile_url')verified=content.get('userInfo').get('verified')guanzhu=content.get('userInfo').get('follow_count')name=content.get('userInfo').get('screen_name')fensi=content.get('userInfo').get('followers_count')gender=content.get('userInfo').get('gender')urank=content.get('userInfo').get('urank')print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注⼈数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微#获取微博内容信息,并保存到⽂本中,内容包括:每条微博的内容、微博详情页⾯地址、点赞数、评论数、转发数等def get_weibo(id,file):i=1while True:url='https:///api/container/getIndex?type=uid&value='+idweibo_url='https:///api/container/getIndex?type=uid&value='+id+'&containerid='+get_containerid(url)+'&page='+str(i)try:data=use_proxy(weibo_url,proxy_addr)content=json.loads(data).get('data')cards=content.get('cards')if(len(cards)>0):for j in range(len(cards)):print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")card_type=cards[j].get('card_type')if(card_type==9):mblog=cards[j].get('mblog')attitudes_count=mblog.get('attitudes_count')comments_count=mblog.get('comments_count')created_at=mblog.get('created_at')reposts_count=mblog.get('reposts_count')scheme=cards[j].get('scheme')text=mblog.get('text')with open(file,'a',encoding='utf-8') as fh:fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")i+=1else:breakexcept Exception as e:print(e)passif __name__=="__main__":file=id+".txt"get_userInfo(id)get_weibo(id,file)爬取结果更多关于Python相关内容可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1引言近年来,社交网络的发展引人注目,参考文献[1]介绍了社交网络的发展现状及趋势。
目前,约有一半的中国网民通过社交网络沟通交流、分享信息,社交网络已成为覆盖用户最广、传播影响最大、商业价值最高的Web2.0业务。
微博作为一种便捷的媒体交互平台,在全球范围内吸引了数亿用户,已成为人们进行信息交流的重要媒介,用户可以通过微博进行信息记录和交流、娱乐消遣以及社会交往等[2]。
Twitter自2006年由Williams E等人联合推出以来,发展迅猛。
Twitter作为一种结合社会化网络和微型博客的新型Web2.0应用形式正风靡国外,其应用涉及商业、新闻教育等社会领域,已成为网络舆论中最具有影响力的一种[3]。
基于微博API的分布式抓取技术陈舜华1,王晓彤1,郝志峰1,蔡瑞初1,肖晓军2,卢宇2(1.广东工业大学计算机学院广州510006;2.广州优亿信息科技有限公司广州510630)摘要:随着微博用户的迅猛增长,越来越多的人希望从用户的行为和微博内容中挖掘有趣的模式。
针对如何对微博数据进行有效合理的采集,提出了基于微博API的分布式抓取技术,通过模拟微博登录自动授权,合理控制API的调用频次,结合任务分配控制器高效地获取微博数据。
该分布式抓取技术还结合时间触发和内存数据库技术实现重复控制,避免了数据的重复爬取和重复存储,提高了系统的性能。
本分布式抓取技术具有可扩展性高、任务分配明确、效率高、多种爬取策略适应不同的爬取需求等特点。
新浪微博数据爬取实例验证了该技术的可行性。
关键词:新浪微博;爬取策略;分布式爬取;微博APIdoi:10.3969/j.issn.1000-0801.2013.08.025A Distributed Data-Crawling Technology for Microblog APIChen Shunhua1,Wang Xiaotong1,Hao Zhifeng1,Cai Ruichu1,Xiao Xiaojun2,Lu Yu2(1.School of Computers,Guangdong University of Technology,Guangzhou510006,China;2.Guangzhou Useease Information Technology Co.,Ltd.,Guangzhou510630,China)Abstract:As more and more users begin to use microblog,people eagerly want to dig interesting patterns from the microblog data.How to efficiently collect data from the service provider is one of the main challenges.To address this issue,a distributed crawling solution based on microblog API was present.The distributed crawling solution simulates microblog login,automatically gets authorized,and control the invoked frequency of the API with a task controller.A time trigger method with memory database was also proposed to avoid extra trivial data duplication and improve efficiency of the system.In the distributed framework,the crawling tasks can be assigned to distributed clients independently,which ensures the high scalability and flexibility of the crawling procedure.The feasibility of the crawler technology according to Sina microblog instance was verified.Key words:Sina microblog,crawling strategy,distributed crawl,microblog API运营创新论坛1462010年国内微博迎来春天,微博如雨后春笋般崛起,四大门户网站均开设微博。
截至2012年12月底,新浪微博注册用户数已超过5亿,同比增长74%,日活跃用户数达到4620万,微博用户数与活跃用户数保持稳定增长,已经成为中国最大的移动社交网络。
社交网络大数据的分析和管理[4]吸引了许多人进行研究,通过对微博数据的挖掘,可以进行预测用户的爱好、预警热点新闻舆论、挖掘人际关系信息、预测信息传播趋势等有趣的研究。
成功地预测信息的传播可以提高市场的效益,促进商业产品的推广,也可以实时监控信息传播的新趋势。
不管是在商业上还是在政治上,都迫切需要数据采集以支持各种数据分析。
利用传统的网页爬虫[5]爬取数据需要大量时间解析网页,这种方式不但处理速度较慢,而且对数据的整合需要自己进行合理转换,不适合实时数据需求的系统。
而基于微博API的方法具有手动授权、接口限制等问题。
本文以舆情系统作为背景分析数据需求,提出基于微博API的数据抓取技术,以新浪微博为例,解决抓取过程中授权过期、接口约束、重复爬取等问题,制定合适的爬取策略,合理分配爬取任务和API。
采用分布式的爬取框架,可扩展性高,可以根据数据爬取需求合理增加或删减爬取机,而不必更改系统的框架。
2采集系统2.1采集目标本文主要从舆情分析角度分析数据需求,包括对用户和关键字的监控、预警、敏感词分析、用户情感分析。
在参考文献[6]中,微博消息的传播途径主要有:转发途径和粉丝途径,这意味着微博数据的爬取主要集中在用户关系图和转发关系图。
在微博消息传播中,用户、微博消息和用户关系是直接影响微博传播力的3个要素。
用户的行为包括对微博的转发、评论、回复、收藏等。
在这里,需要爬取微博的基本信息(转发和评论);抓取用户的基本信息(好友、粉丝、用户所发的微博和用户标签)。
2.2采集约束在基于微博API爬取信息的过程中,爬取的效率跟微博API约束有很大关联。
具体的API限制频率可以查看参考文献[7]。
由于API的约束,具体的爬取策略既要满足数据需求,又要克服这些约束利用有限的接口爬取更多的信息,需要对用户接口进行合理分配,也需要在程序中合理控制接口的调用情况,设计的爬取程序需要具有良好的容错能力,无论是access token的过期还是接口调用超过限制频次,在程序中都进行了很好的处理。
当access token过期时,会自动授权,然后继续爬取;当接口调用超过限制频次时,会让程序处于休眠状态直到接口恢复调用,继续爬取。
2.3采集准则根据微博API数据爬取的特点,提出如下爬取准则:用最少的接口爬取最多的信息,尽量避免重复,可扩展性强。
这里的“最少接口爬取最多信息”,是指合理安排接口的分配,尽量根据数据需求分配数据接口,避免重复爬取和存取数据。
另外,爬取的规模可以根据需求增加或减少,这要求系统的可扩展性强。
3采集系统设计3.1系统功能模块(1)公共微博爬取模块该模块调用微博API的读取接口statuses/ public_timeline,是整个爬取系统的入口,只有在公共微博爬取一定的用户信息和微博信息后,才可以进行后续用户维度和微博维度数据的爬取。
(2)用户维度爬取模块该模块主要调用微博API的用户信息相关接口。
在用户维度上,爬取信息主要是指抓取用户的关系图信息,从而建立起用户的关系图,这对信息的传播行为分析至关重要。
由于微博接口的限制,每次只能爬取200个用户和粉丝,这个数据对于后续的研究是远远不够的,所以用户关系图需要靠微博的转发关系进行扩展,假设用户A转发用户B的微博,则其存在转发关系。
(3)微博维度爬取模块该模块主要调用微博API的微博相关接口。
在微博维度上,爬取信息主要是指抓取微博的转发、评论信息,从而建立起微博的转发关系图。
对于每条微博,每次调用一次API只能爬取一层转发关系图,当一层关系图爬取足够多时,可以根据数据库里的信息建立多层转发图。
3.2系统框架爬取系统的整体框架如图1所示。
采用了分布式的架构并行爬取数据,分成两个主要部分。
①~④部分主要抓取最新的公共微博。
时间触发服务器在一定时间间隔上触发客户机抓取数据并将数据存入Hbase,将用户ID和微博ID存进内存数据库redis中。
redis主要有两个作用:一是进行ID存储,提供后续微博维147图1爬取系统的整体框架度和用户维度的爬取;二是进行重复控制,如果爬取到相同的微博或用户就不将信息存入Hbase。
(1)~(5)部分主要根据redis中用户ID和微博ID抓取其他信息,这里配置了一台task触发服务器,初始化时从redis获取ID,每次客户机通过thrift请求分配ID,task触发服务器响应请求将ID传给客户机进行爬取并将爬取后的信息存入Hbase。
整个框架的任务分工明确,可扩展性强,如果想要爬取更多用户信息,只需要增加爬取客户机向task触发服务器请求就可以,而不需要更改整个系统的框架。
4算法设计对于基于API数据的爬取,在很大程度上受限于接口约束和授权码过期等问题,如何设计合理的算法,在遵守准则的前提下克服以上约束,从而实现数据爬取的最优,是本文要解决的问题。
4.1算法分析(1)重复控制基于API爬取数据算法需要考虑如下几个问题。
第一,申请应用时接口有限,以新浪微博为例,每个应用只有15个测试用户,每个用户每小时只能爬取150次,也由于IP地址每小时1000次的限制,每小时只能有7个测试用户在一个IP地址上爬取1000次,用有限的接口爬取更多的信息,只有对接口进行有利地分配和调度,才能充分利用有限的接口爬取更多的数据信息,因此必须对爬取操作进行重复控制操作。
如果对某个接口,如公共微博的爬取接口statuses/public_timeline,接口调用频次超过公共微博的产生量,将导致接口很快被调用完,但爬取的数据很多是重复的,既浪费了接口,爬取的数据也少,违背了用最少的接口爬取更多数据的准则。
基于以上准则,数据爬取的重复控制需要做得很好,才能爬取更多的信息。