VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 我用Python爬了12万条影评,告诉你《战狼》都在说些啥

截止到 8 月 20 日,《战狼Ⅱ》上映的第 25 天,它的票房已超 50 亿人民币,真正成为唯一一部挺进世界影史票房前 100 名的亚洲电影。

抛开爆炸的票房不说,电影还激起了观众各种情绪,甚至有人放狠话说:敢喷《战狼Ⅱ》的,要么是智障,要么是公敌,就是这么简单粗暴。

大家对《战狼Ⅱ》褒贬不一,纷纷在豆瓣短评上面留言,表达自己对这部电影的看法。尽管各路评论出街,媒体闹得沸沸扬扬,观众还是傻傻分不清楚哪边意见比较靠谱。

截至目前已经有超过十五万的评论,在你看评论的时候,你可能在一段时间里看到的大部分是表扬或者是贬低的评论。

那么通过浏览评论我们很难看出大家对于这部电影的总体情况。现在让我们通过数据分析的方法看看在这些评论中究竟发生了什么有趣的事情!

本文通过 Python 爬虫的方式获取数据,对豆瓣电影评论进行分析,制作了豆瓣影评的云图。

现在,让我们来看看,《战狼Ⅱ》评论里到底藏着哪些有趣的潜台词。

数据的获取

本文采用的是 Python 爬虫的方式获取的数据,用到的主要是 requests 包与正则包 re,该程序并未对验证码进行处理。

之前也爬取过豆瓣的网页,当时由于爬取的内容少,所以并没有遇到验证码的事情。

在写本文爬虫的时候,原以为也不会有验证码,但是当爬取到大概 15000 个评论的时候跳出来验证码。

然后我就想不就是十二万吗?最多我也就是输入大概十几次验证码,所以就没有处理验证码的事情。

但是接下来的事情就有点坑到我了,爬取 15000 左右评论并输入验证码的时候,我以为会接下来爬取到 30000 左右,可是才爬了 3000 左右就不行了,还是要输验证码。

然后就一直这样,跌跌撞撞,有时候爬取好长时间才需要验证码,有时候则不是。不过最后还是把评论爬取下来了。

爬取的内容主要是:用户名,是否看过,评论的星星点数,评论时间,认为有用的人数,评论内容。

以下是 Python 爬虫的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests 
import re
import pandas as pd
url_first='https://movie.douban.com/subject/26363254/comments?start=0'
head={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36'}
html=requests.get(url_first,headers=head,cookies=cookies)
cookies={'cookie':'你自己的cookie'}  #也就是找到你的账号对应的cookie
reg=re.compile(r'<a href="(.*?)&amp;.*?class="next">'#下一页
ren=re.compile(r'<span>(.*?)</span>.*?comment">(.*?)</a>.*?</span>.*?<span.*?class="">(.*?)</a>.*?<span>(.*?)</span>.*?title="(.*?)"></span>.*?title="(.*?)">.*?class=""> (.*?)\n',re.S)  #评论等内容
while html.status_code==200:
    url_next='https://movie.douban.com/subject/26363254/comments'+re.findall(reg,html.text)[0]                             
    zhanlang=re.findall(ren,html.text)
    data=pd.DataFrame(zhanlang)
    data.to_csv('/home/wajuejiprince/文档/zhanlang/zhanlangpinglun.csv', header=False,index=False,mode='a+'#写入csv文件,'a+'是追加模式
    data=[]
    zhanlang=[]
    html=requests.get(url_next,cookies=cookies,headers=head)

相关教程