利用爬虫技术能做到哪些很酷很有趣很有用的事情?

Posted Qunar技术沙龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用爬虫技术能做到哪些很酷很有趣很有用的事情?相关的知识,希望对你有一定的参考价值。

出处:知乎日报


2011 年夏天我在 Google 实习的时候做了一些 Twitter 数据相关的开发,之后我看到了一篇关于利用 Twitter 上人的心情来预测股市的论文。实习结束后我跟几个朋友聊了聊,我就想能不能自己做一点 Twitter 的数据挖掘,当时只是想先写个爬虫玩玩,没想最后开发了两年多,抓取了一千多万用户的 400 亿条 tweet。


分析篇


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

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

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

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


做了词频统计我们还可以做一些语义分析。我们可以利用 unsupervised learning 来分析一条 tweet 的感情色彩。我们对每一条 tweet 的高兴程度在 0 至 1 之间打分,并对每天做平均值,就得到了下面这张图。这里最明显的特征恐怕就是周期性了。是的,大家普遍周末比较高兴。不过这张图的开始和中间有两个点与周期不吻合。如果我告诉你这两天是 1 月 1 日和 2 月 14 日,那你肯定会想到为什么了,元旦和情人节很多人是很高兴的(不排除 slient majority 存在的可能)。

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

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

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

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

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

貌似和美国经济有负相关性啊!为什么呢,我们看下面的图就明白了。这个比例和美国失业率正相关,而经济和失业率又是负相关的。换句话说,美国人(尤其是共和党的)找不到工作了就开始埋怨奥巴马了。

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


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


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

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


技术篇




此外我又做了一些动态优化,根据 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一下吧。当然如果不能翻墙的话有代理服务器恐怕也不能用。


以上是关于利用爬虫技术能做到哪些很酷很有趣很有用的事情?的主要内容,如果未能解决你的问题,请参考以下文章

有意思的大数据利用爬虫技术能做到哪些很酷很有趣很有用的事情?

利用爬虫技术做些很酷很有趣很有用的事情

数据挖掘DW君谈如何利用爬虫技术做些很酷很有趣很有用的事情

python爬虫从入门到精通-系列教程

Python爬虫学习之获取网页源码

一个抓取知乎页面图片的简单爬虫