python 爬取亚马逊评论_用Python爬取3万多条评论,看韩国人如何评价电影寄生虫?...

977d1ade9a5bdc9dade0c74ae6fa6fc9.gif

6b735f36c08058a81dada192ba1816c8.png

作者 | 朱小五 责编 | 郭   芮 今天给大家带来一个关于电影的数据分析文章。别走啊,这次不是豆瓣,也不是猫眼——真的,今天分析的电影是韩国电影《寄生虫》。 它是由韩国导演奉俊昊自编自导的影片,一举拿下最佳影片、最佳导演、最佳原创剧本和最佳国际电影四座奥斯卡奖杯,创造历史成为奥斯卡史上首部非英语最佳影片。 这次带大家看看韩国人如何评价这部韩国电影的?

c1adbd72355ad4fe63e927654d977f7d.png

获取数据 数据从哪获取呢? 我们先打开韩国最大门户网站NAVER: 44a401b7cbb40e6b98c1da9d0a085e56.png 找到영화(电影)板块,搜索기생충(寄生虫)并打开: f03305c48ba9091dc7c519f3700b0080.png 上面介绍部分跟猫眼专业版一样,各种评分、演职员表、评分男女比例、年龄分布。 在评论区部分,它其实有点像是豆瓣和猫眼的综合体,无论看没看过都可以评价打分,不过看过的会单独有个小标识。 我们下划到评论区,下图中可以看到,目前有36360条评价,我们想要获取的数据是黑框中的内容。包括每条留言的评论人昵称、评论时间、评分、评论内容以及这条评论得到的赞或踩。 下面开始爬取评论数据: c7c52b17c19c0366a71a361fddea85ec.png 利用requests和pyquery爬取数据,展示部分源码,完整见文末。
def main():    data = []    for i in range(1,200):    #爬取多少页        url = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?code=161967&type=after&onlyActualPointYn=N&onlySpoilerPointYn=N&order=newest&page='+str(i)        print('准备采集第{}页数据'.format(i))        html = restaurant(url)        doc = pq(html)        for i in range(0,10):            print(i)            dic = {}            dic['star'] = doc('li:nth-child(' + str(i+1) +') > div.star_score > em').text()            dic['text'] = doc('#_filtered_ment_' + str(i)).text()            dic['datetime'] = doc('li:nth-child(' + str(i+1) +') > div.score_reple > dl > dt > em:nth-child(2)').text()            dic['name'] = doc('li:nth-child(' + str(i+1) +') > div.score_reple > dl > dt > em:nth-child(1) > a').text()            dic['zan'] = doc('li:nth-child(' + str(i+1) +') > div.btn_area > a._sympathyButton > strong').text()            dic['cai'] = doc('li:nth-child(' + str(i+1) +') > div.btn_area > a._notSympathyButton > strong').text()            data.append(dic)        #time.sleep(random.random())        pd.DataFrame(data).to_csv('寄生虫评论.csv',encoding="utf_8",index = False)    return data
运行结果: 9cd502d05545d4d4bb4a8548130f1d3b.png 歪瑞古德! 这样我们就成功获取了韩国人评价韩国电影《寄生虫》的评论数据!

e8c8ba488479beafc68bd0e268b9b7ca.png

数据整理 我们简单看一下数据: d4bf6a7f95831c158dab60c86a1d04e1.png 共35940条,比上文截图时候少了一点,这是因为我爬取和写这篇文章的时候有一点时间间隔,所以这个小问题请忽略。 282fba077f7230346c44031a0d9f2dc6.png 另外,非常明显,评论字段缺失了很多。 我查看了一下,认为是在这个网站观看过电影的人可以只打分,不写评论。 (有点像在猫眼上买了电影票,评论时候同样可以只打分,不写评论) 简单补齐它吧,直接删除还是会影响整体的评分的。
def data_cleaning(df):    cols = df.columns    for col in cols:        if df[col].dtype ==  'object':            df[col].fillna('缺失数据', inplace = True)        else:            df[col].fillna(0, inplace = True)    return(df)
这样我们就补全了缺失值。 简单看一下平均分吧: 7ad0192809c1535c32d23fdf81503ee4.png 539d1d6f6aef7a01d72db25f72a03994.png 看来这就是韩国观众的打分(9.07)比网民对《寄生虫》虫的评价(8.48)要高。 这与国内的情况也是相似的,同一部电影猫眼淘票票的分数普遍比豆瓣上要高。 毕竟真金白银去看电影的人,肯定会认为它是一部好片子才去看。 只要不像被《爱情公墓》一样诈骗,基本观众的分数不会太低。 后面想讲韩国网友的评论做一个词云,这样的话我们就需要先将评论中的韩文翻译成中文。

54ac25d6fbbfe9d8e360afbce58469c6.png

翻译评论 采用哪个翻译软件呢? 尝试了几个常见的翻译,发现结果都大同小异。 8874d77098daa32b8be4d8e4185baecc.png 干脆采用了之前自己用过的有道翻译小接口。
def translate(text):    url = 'http://fanyi.youdao.com/translate?&doctype=json&type=KR2ZH_CN&i='+ text    requ_text = requests.get(url)    json_text = requ_text.json()    data = json_text['translateResult'][0][0]['tgt']    time.sleep(2+random.random())    print('翻译中')    return data
将评论列翻译,并新建一列用以做词云:
ata['text_t'] = data.apply(lambda x :translate(x['text']), axis=1)
运行结果: 1366244765a92f62385752ef75e37509.png 额,这个翻译一言难尽,不过大体意思还是可以看懂的,不太影响做词云。 接下来我们开始尝试做做图。 5f82a1130945bbabc2f4b657e956a732.png 分析与可视化 正常利用python分析电影评论都有一个环节是男女比例和评分比例,这次我们并没有获得相关数据,那么就用NAVER网站提供的结果图简单的讲一下吧。 781456cef14aac559a431850cc1031b9.png 观看人群的性别比例非常均衡,各占50%。 各年龄段均有分布,其中[20,30)的观看人群最多。为什么10-20岁的青少年观看这么少呢?后面词云部分会回答这个问题。 8ba60055ca7c31160f5bae2c5a27c2e7.png 在上图普通网民的评价中,女性评分更高一些。随着年龄的增长,评分越低,难道是越是年龄大的人越看透了韩国的现状? 他们主要的欣赏点依次是“导演”、“연기”、“故事”、“视觉效果”、“电影原声”。 (其中的“연기”用翻译软件都是翻译成烟,难道是特效的意思?懂韩文的同学可以留言一下) 546a68f8c34493763cf9685fb6545c74.png 至于看过电影的观众打分比普通网民会高,平均9.07分,而且男性比女性要略高。其他方面大体相似,就不讲了。 我们再看一下,韩国观众对电影《寄生虫》评论数量的时间走势。
plt.figure(figsize=(8,5), dpi=200)x = score_by_time.index.datey = score_by_time.valuesplt.plot(x,y,c="g",marker=".",ls="-")plt.title("韩国电影《寄生虫》评论数走势图")plt.xlabel("月份")plt.ylabel("评论数")
结果如下: cf772d2c87ea55582fed4c191d7068f2.png 可以明显看到,评论数量在电影《寄生虫》上映后达到一个高峰,而后随着时间的推移,数量逐渐减少。 之后有两个小高峰,分别是2019年8月初和2020年2月初。 通过查找新闻信息,收集到了两个消息: 1、韩国电影《寄生虫》,预计将在8月6日公开流媒体服务(就相当于我国的爱奇艺、优酷类似的平台)。 2、《寄生虫》2月10日拿下四项奥斯卡大奖后,在韩国的热度继续上升。 这样大家应该就解释清楚两个小高峰的问题啦。 最后我们再利用有道翻译好的评论数据做个WordCloud词云吧: 7571463e4f2b08f1700afe4ca4d4aca4.png 在对主创人员的讨论中,奉俊昊导演的功力和宋康昊的杰出演技被多次提及,电影中提到的“气味”“果酱”“戒指”也被多次探讨,故事中对社会与现实的反思也是热门的讨论话题。 前文我提到了为什么10-20岁的青少年观看这么少呢?而且词云中“15”这个关键词也比较突出。 这是因为韩国于1998年建立电影分级制度。规定电影分为5个等级:全民、12岁以上、15岁以上、18岁以上可以观看和限制放映。 而《寄生虫》在韩国获得了“15岁以上可以观影”的等级判定。 对作品内容就不做评价了。 以上。 作者:朱小五,互联网公司数据分析师。热衷于Python爬虫,数据分析,可视化,个人公众号《凹凸玩数据》,有趣的不像个技术号~ 声明:本文系作者投稿,版权归其所有。 【End】 《原力计划【第二季】- 学习力挑战》正式开始!
即日起至 3月21日,千万流量支持原创作者,更有专属【勋章】等你来挑战 ab86a63b81b27f8f7b8b568e5ad0b110.png 推荐阅读  ☞谁说国产编译器没救了?这个 C/C++ 和 JavaScript 编译器来了 | 程序人生 2020 ☞中国开发者真实画像:Java长盛,偏爱Windows操作系统,鲜少参与开源项目

☞用于小型图形挖掘研究的瑞士军刀:空手道俱乐部的图表学习Python库

☞罗永浩欲直播带货,京东说可以帮忙联系

☞MySQL数据库无完整备份删库,除了跑路还能怎么办?

☞Libra新编程语言 :Move 的所有权模型灵感来源原来是它……

930b9c91d133ebcf94465cf8bc609e70.png 你点的每一个在看,我认真当成了喜欢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值