1.《开端》
最近大火的《开端》让不少小伙伴着迷。这部剧主要讲述的是大学生李诗情和游戏架构师肖鹤云,在45路公交车被炸毁的当天不断循环,之后为了保护车上乘客的安全,携手阻止公交车爆炸,并找出爆炸人同时寻找凶手真正的作案动机的故事。
电视剧已经播放到了13集,还有两集才大结局,但是大部分观众已经迫不及待地想要看到电视剧最后两集的结局。
目前网友也在各大平台上对《开端》这部剧的结局进行了讨论。为了能够更加深入网友们近期最关注的到底是什么内容,因此利用了爬虫把《开端》的评论进行爬取,从而进行具体的分析。
2.爬取内容
主要爬取了腾讯视频上的评论,参考了文章上的做法:
Python爬虫| 实战爬取腾讯视频评论 易某某,公众号:JAVAandPython君Python爬虫| 实战爬取腾讯视频评论
2.1 分析评论页面
我们可以看到,在《开端》这部剧的评论上,其内容是进行了折叠的:
这里可以知道,评论折叠主要使用了Ajax异步刷新技术。这样不能够靠常规的手段分析网页规律,来爬取具体的评论内容。这时候就需要通过抓包技术,分析评论的网页规律。
利用Fiddle抓包工具进行分析:
- 在网页上,点击按钮查看更多评论
- 通过在Fiddle工具上,找到对应的评论:
- 复制Host中的url,我们就可以找到具体的网页链接地址:
- 从上面可以看到,三个URL中,具体差异性在:cursor= 和 &_= 这两个值中,因此具体思路就是要找出这两个值的规律,然后就可以使用python进行内容爬取
- 具体规律查看上面的那篇文章,文章中发现cursor的值是从上一个链接继承过来的,因此当前页面的cursor可以用上一个URL来进行确定。而 &这个值的规律是:上一个页面的 &_ - 下一个页面&_ = 1
2.2 具体爬虫代码
由于过度频繁的请求腾讯视频网页,会返回连接关闭错误的提醒,为了避免这种情况,做了以下两种操作:
- 需要在每次爬取时进行睡眠操作,同时当出现错误时,睡眠更长的时间:
- 同时也保证在请求完一次后,需要把request连接进行关闭:
具体代码如下:
代码语言:javascript复制import re
import random
import urllib.request
import time
#构建用户代理
uapools=["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0",
]
#从用户代理池随机选取一个用户代理
def ua(uapools):
thisua=random.choice(uapools)
#print(thisua)
headers=("User-Agent",thisua)
opener=urllib.request.build_opener()
opener.addheaders=[headers]
#设置为全局变量
urllib.request.install_opener(opener)
#获取源码
def get_content(page,lastId):
# url="https://video.coral.qq.com/varticle/7640716440/comment/v2?callback=_varticle3242201702commentv2&orinum=10&oriorder=o&pageflag=1&cursor=" lastId "&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=" str(page)
url="https://video.coral.qq.com/varticle/7640716440/comment/v2?callback=_varticle7640716440commentv2&orinum=10&oriorder=o&pageflag=1&cursor=" lastId "&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=" str(page)
request=urllib.request.urlopen(url)
html=request.read().decode("utf-8","ignore")
request.close()
return html
#从源码中获取评论的数据
def get_comment(html):
pat='"content":"(.*?)"'
rst = re.compile(pat,re.S).findall(html)
return rst
#从源码中获取下一轮刷新页的ID
def get_lastId(html):
pat='"last":"(.*?)"'
lastId = re.compile(pat,re.S).findall(html)[0]
return lastId
def main(save_file):
ua(uapools)
#初始页面
page=1642842694728
#初始待刷新页面ID
lastId="6889565751302807937"
for i in range(1,500):
try:
html = get_content(page,lastId)
#获取评论数据
commentlist=get_comment(html)
print("------第" str(i) "轮页面评论------")
for j in range(1,len(commentlist)):
# print("第" str(j) "条评论:" str(commentlist[j]))
save_file.write(str(commentlist[j]) "n")
print("Finish %d epoch" % i)
#获取下一轮刷新页ID
lastId=get_lastId(html)
page = 1
time.sleep(10)
except:
print("Start Sleep")
time.sleep(30)
continue
save_file = open("./data/pinglun.txt", "w", encoding='utf-8')
main(save_file)
save_file.close()
3.数据分析
利用爬虫,本次从腾讯视频网站上爬取了5257条数据。
通过词云分析,发现网友大部分都在关注《开端》这部剧情的几个关键词:王萌萌、司机、循环、女儿、老张、色狼等等。
从词频分布来看,高频词语“循环”、“王萌萌”出现得比较多,其次是“司机”这个词语:
根据文本分析,总结了以下几个比较有代表性得问题:
- 大结局关键道具?
- 王萌萌是什么原因导致的下车?
- 结局走向he还是be?
3.1 最后大结局走向猜测
(1)大结局关键道具?
- 修复手机成为破局关键:大部分网友的评论中,与“王萌萌”关键词出现最多的是手机,修复等关键词,不难发现王萌萌手机中存在破局的关键性线索:
(2)王萌萌是什么原因导致的下车?
从“王萌萌”这个关键词语出发,对应的词云如下:
目前网友讨论的具体走向主要分为两种:
- 王萌萌在五年前陷入过循环
- 王萌萌遭遇色狼
这两种情况讨论最多,同时有接近70%的人相信王萌萌处于循环中。
处于循环中网友的猜测:
捋一下剧情 再猜一下结局n不知道有没有原著也没看过n按现在剧情来说
王萌萌出事的那次45路公交车后续没有爆炸车祸等情况发生,所以车内监控完好,监控内容显示王萌萌并无发生被欺负,吵架,疾病等情况发生,所以让她惊慌绝望非要桥上下车的理由,应该只有进入循环这一个理由了,个人感觉她并没有队友,很不幸当年她那一车人都没有一个道德高尚愿意信任她的人,她的循环应该是不断的经历整车人丧命的车祸(或也是爆炸),期间她也曾尝试过多种办法想救全车人但都无果,最后无奈的她选择救自己,但却不知道进入循环后如果选择自己活不救其他人,反而是终止循环死自己一个的结果。她下车前不是在看某一个人应该是在看所有人,觉得愧疚惋惜。
王萌萌想让李诗情他们解开父母的心结,发动了这个循环,然而能力有限,不得不吸取白的生命力维持循环
被色狼骚扰的猜测:
王萌萌本来就是个品学优良的好学生,考上了个好大学,家庭情况优异,这45路公交常有色狼猥亵小姑娘,司机因为快退休了不想惹事,次次都不理(我不知道电视剧怎么改的)怎么说也是司机的问题吧,王萌萌从小生活环境好没经历这种事情,当时已经吓疯了,所以才这样,当然抢方向盘是不对的。她妈妈更不用说了,我是真的很心疼锅姨,她太难了,啥都没了。当然公交上的乘客也很无辜,但是李诗情被捅那集车上的乘客和王萌萌坐的那辆公交上的乘客一样冷漠