【学习】利用爬虫技术能做到哪些很酷、很有趣、很有用的事情?

分析篇

先给大家看一些分析结果吧。大家几点睡觉呢? 我们来统计一下 sleep 这个词在 Twitter 上出现的频率。

看来很多人喜欢在睡前会说一声我睡了。那我们再看一个更有意思的 : “Thursday”这个词的每天出现的频率。

这里 2 月 2 号是周四,不出意料,这一天提到周四的频率最高。而且好像离周四越近这个频率越高。可是,为什么 2 月 1 号的频率反而低了呢?是因为 2 月 1 号大家不说周四而说明天了(有的人会说 2 月 2 号也可以说是今天,但是因为在 2 月 2 号提到当天的次数太高,因此还是有很多人用周四这个词)。

做了词频统计我们还可以做一些语义分析。我们可以利用 unsuper

vised learning 来分析一条 tweet 的感情色彩。我们对每一条 t

weet 的高兴程度在 0 至 1 之间打分,并对每天做平均值,就得

到了下面这张图。这里最明显的特征恐怕就是周期性了。是的,大

家普遍周末比较高兴。不过这张图的开始和中间有两个点与周期不

吻合。如果我告诉你这两天是 1 月 1 日和 2 月 14 日,那你肯

定会想到为什么了,元旦和情人节很多人是很高兴的(不排除 sli

ent majority 存在的可能)。

这很有意思,但似乎没什么用啊。那我们来看下面这张图,还是 2012 年的情感分析,不过这里对用户进行了过滤,只保留了来自投资人和交易员的 tweet (根据用户的 tweet 我们可以估计他 / 她的职业)。蓝线是这些用户的感情色彩,红线是 S&P 500 指数。看来行情好的时候大家都高兴啊。

最后我们再来看两个统计图吧。2012 年是美国大选年,这里统计了在所有和奥巴马相关的 tweet 里跟提到经济的 tweet 占的比例。红线是这个比例,黑线是 S&P 500

除了上面的分析外我做了很多其他的研究,比如如何判断一个用户的职业,验证六度分隔理论, 以及网络扩张速度的建模,不过这里就先不赘述了。

最后要说的是以上的分析在统计上都是不严谨的,Twitter 上的信息杂音非常大,又有很强的 demographic bias,有很多因素都没有考虑。我们只能希望大数定律能过弥补一些误差。写在这里只是抛砖引玉,给大家看一下爬虫可以做什么。大家感兴趣的话之后我可以补充一下这两个话题:

1、怎样判断一条 tweet 的感情色彩

2、怎样估计一个 Twitter 用户的职业

技术篇

当时 Twitter 用户大概已经有上亿了,每天新的 tweet 也有几千万甚至上亿。能不能把这些数据全部抓取下来呢?这是可能的。Twitter 是有 API 的,不过每个 IP 地址每小时可以抓取 150 个用户最近的 tweet,以这个速度要把几亿个用户抓取一遍需要近一百年。但是,大部分 Twitte 用户是不活跃甚至从来不发 tweet 的,还有很多用户是印尼等国家(不是他们不重要,我真的看不懂他们发的 tweet),如果我们把不说英语,不发 tweet 以及 follow 人数不超过 5 个(好像注册 Twitter 后用户会被要求 follow 5 个人)的用户过滤掉,我们就剩下了大约 10,000,000 个用户,十年就可以搞定了。

十年好像还是太长了……不过 twitter 的访问限制是基于 IP 地址的,只要我从多个 IP 访问 Twitter 不久好了(我真的没有 DDOS twitter 的意思啊)。那么下一步就是搜集大量代理服务器来访问 Twitter api。为了做 twitter 的爬虫我专门做了一个爬虫去搜集免费代理服务器。免费的东西总是有代价的,这些服务器非常不稳定。因此我又建立了一套代理服务器管理系统,定期更新 IP 地址,删除不能用的服务器。最后这套系统平均每天有几百个可用的服务器,大约半个月就可以把一千万个用户抓取一遍了。

此外我又做了一些动态优化,根据 Twitter 用户的 follower 数量决定他们的抓取频率,以提高重要用户 tweet 的实时性。

在一年半的时间里,这套系统一共抓取了 400 亿条 tweet,加起来得有 10TB,估计占来自美国 tweet 数量的一半左右。那么问题来了,怎么存贮这些 tweet 呢?如果要做分析的话恐怕把数据读一遍就要好几天了。很多人马上会说 hadoop, cassandra, spark 等等。不过作为一个穷学生我哪里有钱去做一个 cluster 呢?这些数据存在 AWS 上就得每月 1000 刀了。

自己动手,丰衣足食。解决方案就是自己组装一个服务器,买了 8 块 3T 硬盘做了一个 12TB 的磁盘矩阵放在寝室里。

软件使用了最为传统的 MySQL,这是一个存了 400 亿条数据的 MySQL 数据库。我花了大量时间去做优化,尝试了各种各样的 partition, ordering, indexing。最后可以实现一天之内对 100-200 亿条数据进行线型搜索或过滤,或者几秒钟内调取某一天的或某一条 tweet。

这台服务器现在留在了 MIT,毕业后我把它提供给了一位教授做研究。

PS:

这个项目在2013年停止了,因为social media已经不在火,而且twitter于2013年中关闭了相关的API接口。

这个项目的初衷是学术性质的,我不想违反twitter的服务条款,因此这些数据没有被出售或者用来谋求商业价值,而是留给了MIT做研究。

在这期间与几个朋友进行了很愉快的合作,未征得他们允许就不在此提名了。

暂时没有开源的打算,因为当时水平有限,代码写得太丑了(用java写的)。

PS2:

很多人问怎么找代理服务器,请大家google一下吧。当然如果不能翻墙的话有代理服务器恐怕也不能用。

作者:Emily L

来源:知乎日报

PPV课其他精彩文章:


1、回复“干货”查看干货 数据分析师完整知识结构

2、回复“答案”查看大数据Hadoop面试笔试题及答案

3、回复“设计”查看这是我见过最逆天的设计,令人惊叹叫绝

4、回复“可视化”查看数据可视化专题-数据可视化案例与工具

5、回复“禅师”查看当禅师遇到一位理科生,后来禅师疯了!!知识无极限

6、回复“啤酒”查看数据挖掘关联注明案例-啤酒喝尿布

7、回复“栋察”查看大数据栋察——大数据时代的历史机遇连载

8、回复“数据咖”查看数据咖——PPV课数据爱好者俱乐部省分会会长招募

9、回复“每日一课”查看【每日一课】手机在线视频集锦

PPV课大数据ID: ppvke123 (长按可复制)

大数据人才的摇篮!专注大数据行业人才的培养。每日一课,大数据(EXCEL、SAS、SPSS、Hadoop、CDA)视频课程。大数据资讯,每日分享!数据咖—PPV课数据爱好者俱乐部!

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2015-05-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏HaHack

SCNUThesis招募新的维护者

953
来自专栏美团技术团队

互联网公司数据安全保护新探索

3498
来自专栏吉浦迅科技

加拿大超算中心利用Allinea工具弥合创新缺口

SciNet运用Allinea的调试工具加速了加拿大领先高性能计算(HPC)系统在软件方面的发展 “如果有人告诉你他的代码是百分百正确的,那他就太夸张了...

3108
来自专栏云计算D1net

工信部电信研究院:云无信不立

主持人: 非常感谢朱总的演讲和演示,之前我们所做的云计算市场调研中发现,客户对于云安全的信任和认可将直接决定客户的接受度。接下来工信部电信研究院主任何宝宏将和我...

3294
来自专栏数据和云

岁末警示:当你手抖删了线上数据库..

作者简介: ? 一乐,aka 梁宇鹏 现任环信首席架构师兼IM技术总监,负责即时通讯云平台的整体研发和管理。曾任新浪微博通讯技术专家,负责微博通讯系统的设计与研...

44710
来自专栏VRPinea

Exelus推出Nomadeec,或可利用Holoens实现远程医疗

3068
来自专栏IT派

帮程序员减压放松的 10 个良心网站

IT派 - {技术青年圈} 持续关注互联网、大数据、人工智能领域 同学们工作之余,不妨放下微博跟朋友圈,来这10个网站感受一下看着就醉了的情境:「念完往上一...

3635
来自专栏区块链入门

【寄云科技】风电检测|汽车整装行业+人工智能工业互联网成功应用案例

寄云科技是专注用先进技术结合行业经验,推动产业升级的工业互联网平台厂商,利用云计算、大数据和物联网技术,致力于为企业提供全套IT+OT的解决方案,帮助传统的企业...

2142
来自专栏BestSDK

写了3年前端依然原地踏步,你可能犯了这10个错误

1.只看教程,不动手实战 这个可以说是学习的最大的一忌,也是提醒过最多的一个注是事项!网上的教程有许多许多,各个语言,各个知识点,各方面的都有,java,htm...

3754
来自专栏机器人网

想开发孩子的智力?请考虑这款呆萌的可编程学习机器人

Marty是一个带有WiFi功能的可编程行走机器人,它的零部件可以通过3D打印进行定制。尽管设计得简单易用,非常适合初学者,但一点也不影响Marty用来做一些很...

3255

扫码关注云+社区