郭敬明五年电影最动人之作 | Python爬取《悲伤逆流成河》

一、我的感受

知道《悲伤逆流成河》上映还是在qq空间看见学弟发了说说,突然想起初中追小四的书,每天看到晚上10点多,昨天看了枪版的《悲伤逆流成河》,整个故事情节几乎和小说一模一样,当然缩减是避免不了的,最大的不一样的是原著里的易遥是跳楼自杀的,而电影里路遥是在众人的"舌枪唇剑"、幸灾乐祸的眼睛下,带着不甘与怨恨跳河自杀的,最后竟然…我就不剧透了,整部剧大概一个小时四十分钟下来全程无尿点,昨天就是枪版的我都看了两遍…(正打算找人去电影院再看一遍),也是看了第一遍,才让我想写这篇充满技术+情感的文章。

二、技术搞事情(爬一爬)

1.猫眼电影短评接口

http://maoyan.com/films/1217236

我们直接访问这个,在web端只能看到最热的10条短评,那怎么获取到所有短评呢?

(1) 访问上面的链接,按下F12,然后点击图片上的图标,把浏览模式(响应式设计模式,火狐快捷键Ctrl+Shift+M)改为手机模式,刷新页面。

第一步

刷新后

(2)换用谷歌浏览器,F12下进行上面操作,加载完毕后下拉短评,页面继续加载,找到含有offset和startTime的加载条,发现它的Response中包含我们想要的数据,为json格式。

获取到真正的评论接口

2.获取短评

(1)简单分析

通过上面分析

Request URL: http://m.maoyan.com/mmdb/comments/movie/1217236.json?v=yes&offset=0&startTime=0%2021%3A09%3A31

Request Method: GET

下滑了几次次,我发现了下面规律:

测试表

分析上面数据变化,可以大致猜测出:offset表示该接口显示评论开始位置,每个页面15条,比如:15,则显示15-30这中间的15条评论; startTime表示当前评论的时间,固定格式(2018-10-06)。

另外接口最后的%2021%3A09%3A31是不变的。

(2)代码获取

'''

data : 2018.10.06

author : 极简XksA

goal : 爬取猫眼《悲伤逆流成河》影评,词云可视化

'''

# 猫眼电影介绍url

# http://maoyan.com/films/1217236

importrequests

fromfake_useragentimportUserAgent

importjson

headers = {

"User-Agent": UserAgent(verify_ssl=False).random,

"Host":"m.maoyan.com",

"Referer":"http://m.maoyan.com/movie/1217236/comments?_v_=yes"

}

# 猫眼电影短评接口

offset =0

# 电影是2018.9.21上映的

startTime ='2018-09-21'

comment_api ='http://m.maoyan.com/mmdb/comments/movie/1217236.json?_v_=yes&offset={0}&startTime={1}%2021%3A09%3A31'.format(offset,startTime)

# 发送get请求

response_comment = requests.get(comment_api,headers = headers)

json_comment = response_comment.text

json_comment = json.loads(json_comment)

print(json_comment)

返回数据:

json数据

(3)数据简单介绍

数据介绍表

(4)数据提取

# 获取数据并存储

defget_data(self,json_comment):

json_response = json_comment["cmts"]# 列表

list_info = []

fordatainjson_response:

cityName = data["cityName"]

content = data["content"]

if"gender"indata:

gender = data["gender"]

else:

gender =0

nickName = data["nickName"]

userLevel = data["userLevel"]

score = data["score"]

list_one = [self.time,nickName,gender,cityName,userLevel,score,content]

list_info.append(list_one)

self.file_do(list_info)

3.存储数据

# 存储文件

deffile_do(list_info):

# 获取文件大小

file_size = os.path.getsize(r'G:\maoyan\maoyan.csv')

iffile_size ==0:

# 表头

name = ['评论日期','评论者昵称','性别','所在城市','猫眼等级','评分','评论内容']

# 建立DataFrame对象

file_test = pd.DataFrame(columns=name, data=list_info)

# 数据写入

file_test.to_csv(r'G:\maoyan\maoyan.csv', encoding='gbk', index=False)

else:

withopen(r'G:\maoyan\maoyan.csv','a+', newline='')asfile_test:

# 追加到文件后面

writer = csv.writer(file_test)

# 写入文件

writer.writerows(list_info)

4.封装代码

文末获取封装好的爬取猫眼电影数据代码。

猫眼短评的反爬可以说几乎没有,中间断了两次,更改数据,重新运行即可,不封ip。

5.运行结果显示

获取数据显示

三、技术搞事情(数据分析可视化)

1.提取数据

代码:

defread_csv():

content =''

# 读取文件内容

withopen(r'G:\maoyan\maoyan.csv','r', encoding='utf_8_sig', newline='')asfile_test:

# 读文件

reader = csv.reader(file_test)

i =0

forrowinreader:

ifi !=0:

time.append(row[0])

nickName.append(row[1])

gender.append(row[2])

cityName.append(row[3])

userLevel.append(row[4])

score.append(row[5])

content = content + row[6]

# print(row)

i = i +1

print('一共有:'+ str(i -1) +'条数据')

returncontent

运行结果:

一共有:15195条数据

2.评论者性别分布可视化

代码:

# 评论者性别分布可视化

defsex_distribution(gender):

# print(gender)

frompyechartsimportPie

list_num = []

list_num.append(gender.count('0'))# 未知

list_num.append(gender.count('1'))# 男

list_num.append(gender.count('2'))# 女

attr = ["其他","男","女"]

pie = Pie("性别饼图")

pie.add("", attr, list_num, is_label_show=True)

pie.render("H:\PyCoding\spider_maoyan\picture\sex_pie.html")

运行结果:

性别分布

从数据上看,大多数评论者在注册猫时个人信息栏没有标注性别,而且男女中,评分者主要是女生,也好理解,这本来就是一部比较文艺、小众的青春篇,女生可能更为喜爱,而男生可能更加喜欢动作大片。

3.评论者所在城市分布可视化

代码:

# 评论者所在城市分布可视化

defcity_distribution(cityName):

city_list = list(set(cityName))

city_dict = {city_list[i]:0foriinrange(len(city_list))}

foriinrange(len(city_list)):

city_dict[city_list[i]] = cityName.count(city_list[i])

# 根据数量(字典的键值)排序

sort_dict = sorted(city_dict.items(), key=lambdad: d[1], reverse=True)

city_name = []

city_num = []

foriinrange(len(sort_dict)):

city_name.append(sort_dict[i][0])

city_num.append(sort_dict[i][1])

importrandom

frompyechartsimportBar

bar = Bar("评论者城市分布")

bar.add("", city_name, city_num, is_label_show=True, is_datazoom_show=True)

bar.render("H:\PyCoding\spider_maoyan\picture\city_bar.html")

# 地图可视化

defrender_city(cities):

点击阅读原文查看该函数完整代码

运行结果:

柱状图城市分布

地理位置分布

从中可以看出,大多数观影评分者位于我国东南部分,城市分布上,深圳、成都、北京、武汉、上海占据前五,因为图标里还有很多地级市,所以数据不集中(最大的也只有几百),还是可以看出,这些人大多分布在一二线城市,有消费能力,也愿意在节假日消费,有钱,就是好。

4.每日评论总数可视化分析

代码:

# 每日评论总数可视化分析

deftime_num_visualization(time):

frompyechartsimportLine

time_list = list(set(time))

time_dict = {time_list[i]:0foriinrange(len(time_list))}

time_num = []

foriinrange(len(time_list)):

time_dict[time_list[i]] = time.count(time_list[i])

# 根据数量(字典的键值)排序

sort_dict = sorted(time_dict.items(), key=lambdad: d[0], reverse=False)

time_name = []

time_num = []

print(sort_dict)

foriinrange(len(sort_dict)):

time_name.append(sort_dict[i][0])

time_num.append(sort_dict[i][1])

line = Line("评论数量日期折线图")

line.add(

"日期-评论数",

time_name,

time_num,

is_fill=True,

area_color="#000",

area_opacity=0.3,

is_smooth=True,

)

line.render("H:\PyCoding\spider_maoyan\picture\c_num_line.html")

运行结果:

每日评论数折线图

由于数据显示不完整,不能很好的看出评论数量变化,但基本可以看出每天的评论数都为1005,我估计是猫眼限制了每天评论数的显示,或者我获取的时候被限制了,从9.21开始到10.6的16天里,每天新增评论数均达到最大值,可以说明其热度不减。

5.评论者猫眼等级、评分可视化

代码:

# 评论者猫眼等级、评分可视化

deflevel_score_visualization(userLevel,score):

frompyechartsimportPie

userLevel_list = list(set(userLevel))

userLevel_num = []

foriinrange(len(userLevel_list)):

userLevel_num.append(userLevel.count(userLevel_list[i]))

score_list = list(set(score))

score_num = []

foriinrange(len(score_list)):

score_num.append(score.count(score_list[i]))

pie01 = Pie("等级环状饼图", title_pos='center', width=900)

pie01.add(

"等级",

userLevel_list,

userLevel_num,

radius=[40,75],

label_text_color=None,

is_label_show=True,

legend_orient="vertical",

legend_pos="left",

)

pie01.render("H:\PyCoding\spider_maoyan\picture\level_pie.html")

pie02 = Pie("评分玫瑰饼图", title_pos='center', width=900)

pie02.add(

"评分",

score_list,

score_num,

center=[50,50],

is_random=True,

radius=[30,75],

rosetype="area",

is_legend_show=False,

is_label_show=True,

)

pie02.render("H:\PyCoding\spider_maoyan\picture\score_pie.html")

运行结果:

等级分布

评分分布

从数据可视化结果可以看出,评论者中有47.08%为猫眼二级用户,31.5%为猫眼三级用户,四级及以上用户占11.82%,0级或1级(可以认定为新注册用户)占9.6%,可以看出评分的人中水军是很少的,基本都是猫眼老用户,评分和评论都不会有任何客观色彩。

从评分上看,五星的满分,评分在3星及以上的占93.8%,评分在4星及以上的占87.7%,评分在5星的(满分)占62.82%,可以看出大家对该电影是一致好评。

源码:

https://github.com/XksA-me/spider/tree/master/spider_maoyan


如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:大禹编程,您的支持是对我最大的鼓励!共同学习,共同进步:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容