内容简介:周末了,写一点好玩的。复联 4 本周开始上映,并一直维持非常高的热度。那么哪些电影用户都在谈什么呢?本文就从 0 到 1 讨论一下如何通过抓取豆瓣的短评来进行一下简单的数据分析。由于豆瓣的限制,数据量并不是很大,但是分析方法都是相通的。数据抓取可以查看豆瓣 web 页面的审查元素查看到的前端的原始数据是什么样的?(Safari: 右键 -> 检查元素;Crome: 右键 -> 检查)如下图:
周末了,写一点好玩的。复联 4 本周开始上映,并一直维持非常高的热度。那么哪些电影用户都在谈什么呢?本文就从 0 到 1 讨论一下如何通过抓取豆瓣的短评来进行一下简单的数据分析。由于豆瓣的限制,数据量并不是很大,但是分析方法都是相通的。
1. 数据抓取
数据抓取可以查看豆瓣 web 页面的审查元素查看到的前端的原始数据是什么样的?(Safari: 右键 -> 检查元素;Crome: 右键 -> 检查)如下图:
然后将结果进行解析抓取对应的元素,这个写过爬虫的同学都了解,不细说。本文采用了另外一种较简单的方式来抓取数据:douban api。抓取豆瓣短评的 api 如下:
-
url:https://api.douban.com/v2/movie/subject/:id/comments,其中 id 为电影 id,可以在电影的页面看到
-
参数说明:
-
apikey
:开发者 api key,需要申请 -
count
:返回数量 -
start
:开始序号
2. 分词
中文分词我第一个想到的是梁博的 pullword,但是使用过程中并不理想。并不是说 pullword 做的不好,毕竟 pullword 也是有很多人使用的,可能是不太适合我的数据。我最后使用的分词 工具 是 jieba。jieba 支持 python 2 和 python 3。使用起来也是非常的简单,第一步安装:
easy_install jieba / pip install jieba / pip3 install jieba
示例代码
# encoding=utf-8
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
更详细的信息可以参考 jieba 主页:https://github.com/fxsjy/jieba
3. 完整代码
综合第一步和第二步我们使用 python 2 编写完整代码如下,非常简单。
#coding:utf-8
import urllib2
import jieba
start = 1
words = {}
f = open("comment", "w")
while start < 600:
url = "https://api.douban.com/v2/movie/subject/26100958/comments?start={0}&count={1}&apikey=your_own_api_key".format(start,20)
data = urllib2.urlopen(url, timeout=5)
j = json.load(data)
for comment in j["comments"]:
f.write(comment["content"].encode("utf8"))
word_list = jieba.cut(comment["content"].replace('\n','').encode("utf8"))
for word in word_list:
word = word.strip()
if words.get(word):
words[word] = words[word] + 1
else:
words[word] = 1
start = start + 20
f.close()
sorted_words = sorted(words.items(), key=lambda d: d[1], reverse=True)
for item in sorted_words:
print item[0].encode("utf8"), item[1]
4. 形式化展示
第三部的结果出来之后就可以考虑通过图表形式化展示出来了,一种比较合适的方式是使用词云。我这里使用是易词云,结果如下。
光是看着词云就忍不住要去电影院了,不说了,我先去下单了。
最后关于代码的使用问题,欢迎后台留言。
以上所述就是小编给大家介绍的《数据分析 | 看过复联 4 的人都在谈什么》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 你真的了解当年看过的 AVI 么
- 图解Spring循环依赖,看过之后再也不怕面试被问到了!
- 看过上百部片子的这个人教你视频标签算法解析
- 看过这篇剖析,你还不懂 Go sync.Map 吗?
- 坑爹代码 | Stream 玩得最 6 的代码,看过的人都惊呆了
- 如何优雅的设计RESTful API?这是我看过讲的最清晰的文章!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。