查看原文
其他

古天乐的吕布有多猛?Python爬虫可视化告诉你!

是沐沐呀 GOGO数据 2022-08-01

电影根据同名游戏改编,讲述了动荡的东汉末年,汉室摇摇欲坠,董卓入京霸占朝野,引起天下动荡,身怀绝世武艺的曹操、吕布、刘备、关羽、张飞等各路英雄豪杰纷纷崛起,一场群雄逐鹿的大混战正式拉开序幕。在乱世中,到底谁才是真正的无双英雄…….


一个字,为了娜扎,这杯电影我干了...



大家好才是真的好,来看看九千多名观众老爷怎么说?


1. 首先我们打开豆瓣电影,找到真三国无双影评栏目,我们要采集的数据有四个。观影人、观影时间、星评和观影评论。

https://movie.douban.com/subject/26747869/comments?status=P


2. 我们在网页F12打开浏览器模式,点击翻页找到网页真实链接如下:可以发现控制当前翻页的就是参数page。所以我们可以利用这个参数实现对全部页面信息的进行获取。

https://movie.douban.com/subject/26747869/comments?percent_type=&start=20&limit=20&status=P&sort=new_score&comments_only=1&ck=5YEKhttps://movie.douban.com/subject/26747869/comments?percent_type=&start=40&limit=20&status=P&sort=new_score&comments_only=1&ck=5YEKhttps://movie.douban.com/subject/26747869/comments?percent_type=&start=60&limit=20&status=P&sort=new_score&comments_only=1&ck=5YEK


4.  用浏览器插件打开链接发现我们的信息都是存在于一个JSON结构的数据之中。所以我们先来编码获取到这些JSON结构里面的数据。

url = f'https://movie.douban.com/subject/26747869/comments?percent_type=&start=0&limit=20&status=P&sort=new_score&comments_only=1&ck=5YEK'
headers = {
    
'Cookie':'bid=77oieC-RV0Q; douban-fav-remind=1; __gads=ID=750bb0d7bb0e2ef1-2280fd78d9c700fc:T=1620306991:RT=1620306991:S=ALNI_MaG08LWSHCASdoCR8fMHyggcdK-3g; ll="108314"; __yadk_uid=NseIT8aunrxLhPNkcR1i4MCxIztwzvGJ; _vwo_uuid_v2=DEE64CE6A66B696B7B2240750A172DD74|b5251b9357a5fe7523145399af5cd426; dbcl2="153819075:U/WERmjSQ/g"; push_noty_num=0; push_doumail_num=0; __utmv=30149280.15381; __utmz=30149280.1620828769.5.4.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmz=223695111.1620828769.4.4.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; ck=5YEK; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1620873586%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DaXYlDccx0xzdVEd-lhgIqUSkNgXQT2nmlT8oEsKfnMlGvH8K-PLDEaoxj3ME20pr%26wd%3D%26eqid%3De0f827da00100aa100000005609be25b%22%5D; _pk_ses.100001.4cf6=*; __utma=30149280.1327181008.1620306993.1620828769.1620873586.6; __utmb=30149280.0.10.1620873586; __utmc=30149280; __utma=223695111.1104121273.1620647031.1620828769.1620873586.5; __utmb=223695111.0.10.1620873586; __utmc=223695111; ap_v=0,6.0; _pk_id.100001.4cf6=9fff5850dd4f2142.1620647031.5.1620873695.1620828786.',
    
'Referer':f'https://movie.douban.com/subject/26747869/comments?start=0&limit=20&status=P&sort=new_score',
    
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4484.7 Safari/537.36'
}

resp = requests.get(url, headers = headers).json()[
'html']
print(resp)


5.接下来我们使用正则表达式来在这些html列表中提取我们所需的信息。

comments = re.findall('<span class="short">(.*?)</span>', resp, re.S)   # 所有评论
times = re.findall('<span class="comment-time " title="(.*?)">', resp, re.S)  # 观影时间
authors = re.findall('<a title="(.*?)" href.*?>', resp, re.S)               #观影者
votes = re.findall('<span class="votes vote-count">(.*?)</span>', resp, re.S)  #赞同人数
stars =  re.findall('<span class="allstar(.*?) rating"', resp, re.S)  #好评人数

for comment, time, author, vote, star in zip(comments, times, authors, votes, stars):
      print(author, time, comment, vote, star)

'''
流浪的孤独 2021-05-01 20:01:45 一部根据历史改编的小说改编的游戏改编的电影 1447 20
Puff 2021-04-28 15:25:11 得先跟周顯揚導演說聲對不起,實在是錯怪你了,這部片不是爛片!同是電玩改編,這部片比同期的《真人快打》好看太多,劇情相當紮實,實在很訝異周顯揚如此認真講述三國前傳的故事,動作場面在寫實與電玩之間拿捏的相當好,不會過度開掛,也不會過度弱化寫實感,基本上除了打鬥以外的時間,它就是一部劇情片,應該是古仔近年演過的流水席電影中劇情感最強烈的一部,開場的確會讓人以為這部就是大型手遊廣告,尤其特效質感實在讓人出戲,但是越看到後面越覺得發功時的浮誇特效,是要讓觀眾意識到自己還是在看一部電玩改編的作品,特效團隊才故意將質感做的像手遊一樣,藉以在寫實與電玩之間來回切換,當然劇情還是有一點點廢到笑的情節在裡頭(尤其是古仔與貂蟬的戲😂),撇除這些小小的劇情瑕疵,《真三國無雙》是一部非常有誠意的電玩改編三國電影。717 40
百代过客 2021-05-01 20:43:02 不骗你们,罗家英被王凯捅了大喊“啊”的时候真的全场爆笑,就冲这么欢乐的片子你们不考虑去感受一下吗,比那些所谓喜剧片欢乐多了。360 20
八脚鱿鱼 2021-05-01 02:02:42 一星给游戏的BGM,半星给构图和画面,半星给王凯和古天乐的演技。剧情垮到不知道怎么吐槽,一些经典的三国故事也被重新演绎得直接吐血三升。王凯的粤语配音真TMD出戏,最后,无主角,男人群戏。335 20
韦斯安徒生 2021-05-01 11:26:40 绝了,就仿佛是一部从烂片平行宇宙穿越过来的电影,不然真的无法理解怎么能有人搞这么个阵容用这么大IP拍出这种没有1秒钟能看的片子 612 10
拥桑 2021-05-01 08:39:24 真·三国系列以来·前无古人后无来者·无双烂片。每个主演现在看到都能吓跑那种。除了营销娜扎的美丽,把每个明星价值榨干。然后用七零八碎的特效,浮夸的滤镜和浓厚的低智改编能把人雷倒的程度。471 10
吃胶片的考拉 2021-05-01 10:49:25 麻了麻了,真的笑麻了 162 20
Xxin 2021-05-01 16:36:31 它知道它是烂片,我知道它是烂片,我知道它自己知道它自己是烂片。我买票看它图个乐,它给足了我欢乐,我们都用一颗真诚的心对待了彼此。1389 30
. 2021-05-01 09:01:56 电影一无是处,能和前两年的《阿修罗》媲美,一分给娜扎的颜。368 10
晚不安 2021-05-01 14:29:19 不出所料,确实是《阿修罗》级别的年度喜剧巨制,观众不笑的时候,银幕里的角色就贴心地帮着大笑。且不说伐董的大剧情无非搬弄了些妇孺皆知的“快消”起源故事,周显扬的审美之过时之土鳖,在那些他引以为傲的格斗段落得到集中展现:结尾三英战吕布那就是字面意义上的“天雷滚滚”,中二感爆棚——把游戏的特色原封不动地移植到电影里,最终效果就是两头不靠的双向损耗。刘嘉玲带出的那些奇幻世界观也是贻笑大方,这个原创角色状若全知全能的天神,实际功能只是神经兮兮地念设定、连剧情、送装备,如《无极》中的满神一般脱线。267 10
一口大井子 2021-05-01 18:18:21 救命!这是什么?百变大咖秀吗?系兄弟就把这个电影砍了吧!222 10
绛蓝 2021-05-01 17:30:13 看得非常欢乐然后回来打一星 160 10
こんにち度は 2021-05-01 02:10:14 5.1 首映  越看越拉胯,3分不能再多了,童年回忆情怀也拉了,也没整个无双觉醒,真tm催眠。刘备和曹操的剑能tm一模一样的?就看曹操稍微顺眼点。117 10
J_S_Li 2021-05-01 08:52:18 影片前十几分钟让我觉得好像在看游戏直播,适应了之后觉得还行,至少节奏挺快的。时而会有些迷惑台词,有种看很多年前港片的感觉,罗家英一出来我都担心他要唱歌,王凯帅的。347 30
Klematis 2021-04-29 22:20:33 御三家大战皮卡丘 431 40
二月鸟语 2021-05-01 23:19:35 好片我不看,烂片我必看,哎,我就是玩~ 70 10
deer into lion 2021-05-01 09:11:46 港片追车不行了,开始追马?96 10
新憧🌱 2021-05-01 18:25:25 就像我在登陆黄色网站时弹出来的网页,太夸张太游戏化了,可能真的只属于游戏玩家,在我这个普通观众看来,吕布就像头戴雉鸡翎的孙悟空一蹦老高,会放皮卡丘十万伏特的大招……雷得我外焦里嫩。65 10
彩蛋君KL 2021-04-29 23:02:53 竟然比想象中好看一点点,一直期待能出现“敌羞吾去脱他衣”的相关彩蛋,遗憾并没有,反而是关二哥不知何故脱了自己衣。307 30
花渡 2021-05-01 15:29:33 预告诚不欺我。好久没看到过这么欢乐的烂片了,即便你是游戏的玩家,也不得不承认这剧情的流水与无力;倘若你事先没有了解过《无双》的设定,也会被里面「手撕鬼子」式的夸张的割草而笑爆。不过吕布大战刘关张那段动作衔接还挺好的。承认吧,很多的爽感都只局限在某种形式的媒介里。65 10
Whispers. 2021-05-01 21:27:29 我他妈这辈子没有看过这么令人尴尬的电影 70 10
卡妙 2021-05-01 21:26:43 本片将是金扫帚奖有力的竞争者 64 10
桃桃林林 2021-05-06 20:51:31 手游广告式的动作场面+经典三国小故事串烧。挺好笑的。39 20
顗礼 2021-05-01 20:27:41 不难看唉,游戏实况+神经喜剧,多中二欢乐呀,有点娱乐精神嘛!40 20
'''


6.成功提取到信息之后我们接下来提取全部的信息,刚才我们已经知道翻页是由参数page决定的,我们只需给它加上一个循环即可。

    for page in range(125+1):
        url = f'https://movie.douban.com/subject/26747869/comments?percent_type=&start={(page-1)*20}&limit=20&status=P&sort=new_score&comments_only=1&ck=5YEK'


7.接下来就是数据的保存了。我们计划将所有的数据豆瓣存于Excel中。这里我们使用的是openpyxl来实现。

   #创建Excel
    ws = op.Workbook()
    wb = ws.create_sheet(index=0)
    
    #创建标题
    wb.cell(row=1, column=1, value='观影者')
    wb.cell(row=1, column=2, value='观影时间')
    wb.cell(row=1, column=3, value='观影评论')
    wb.cell(row=1, column=4, value='赞同人数')
    wb.cell(row=1, column=5, value='好评人数')
    
    #数据存入Excel
    wb.cell(row=space, column=1, value=author)
    wb.cell(row=space, column=2, value=time)
    wb.cell(row=space, column=3, value=comment)
    wb.cell(row=space, column=4, value=vote)
    wb.cell(row=space, column=5, value=star)
    
    #存放文件名
    save_file = '豆瓣短评.xlsx'

8.数据保存完毕接下来就是我们的可视化了,网友们发了这么多评论都说了下啥?我们用词云来直观的看看。

#绘制词云
def ciyun():
    rcv_data = pd.read_excel('豆瓣短评.xlsx')         
    c_title = rcv_data['观影评论'].tolist()
    #观影评论词云图
    wordlist = jieba.cut(''.join(c_title))
    result = ' '.join(wordlist)
    pic = 'img.jpg'
    gen_stylecloud(text=result, icon_name="fas fa-hand-point-left", font_path='msyh.ttc', background_color="white", output_name=pic)
    print('绘图成功!')
    
'''
Loading model cost 0.688 seconds.
Prefix dict has been built successfully.
绘图成功!
'''


再换个效果看看。


9. 观众评分从10-50分为五个区间。接下来我们再看看大家伙对这部电影的评分情况。

stars_set = set(stars)
for item in stars_set:
    data.append((item, stars.count(item)))
print(data)

'''
[(40, 30), (10, 166), (50, 17), (20, 181), (30, 92)]
'''

接下来我们在用柱状图和扇形图来更加直观的展示一下评分。



10. 观众评价10-20为差评,30-40为中评,50为好评。接下来我们用可视化来看看这部电影的评价如何。



看来大家对这部片子不是很友好哇......


11.那我们来看看大家对演员的评价如何?我们从所有的评论中提取演员名字来看看名字出现的频率。这里我选择演员表前五位作为参考哈。

def Actor_no():
    pd_data = pd.read_excel('豆瓣短评.xlsx')  # 读取excel  
    keyword = ['古天乐''王凯''杨祐宁''韩庚''古力娜扎']
    '''
    Pandas str.findall()方法用于在系列的每个字符串中查找子字符串或分隔符。
    '''

    test1 = pd_data['观影评论'].str.findall('|'.join(keyword))
    cishu = pd.value_counts(test1)

'''
['韩庚', '王凯', '古天乐', '古力娜扎', '杨祐宁', ]
[48, 52, 41, 5, 5]
'''



当然我觉得这种方法不是很准确,例如不应该使用娜扎名字来判断演员的受欢迎程度,使用貂蝉可能效果就不一样了。


当然这个不是我们的最终目的,拿到数据学会分析才是!您觉得呢?


欢迎大家留言自己的看法,需要源码学习的小伙伴公众号回复'三国'即可!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存