pig66

这个夏天,《长安十二时辰》火了。
易烊千玺、雷佳音主演;马伯庸同名小说改编。
耗巨资花费七个月时间打造七十多亩长安城。
这部剧史料严谨,造型考究,堪称良心制作。
目前豆瓣评分也达到8.6的高分。

在这里插入图片描述
吐槽下优酷的广告太长了,不过告诉大家一个小道消息,支付宝铂金会员可以使用会员积分兑换一个月优酷会员哦!

一、需求背景

故事主要是讲述了唐天宝三载,上元节当日的帝都长安。在一派歌舞升平的繁华盛景中,一群偷偷潜入的突厥狼卫酝酿着灭城的阴谋。只有一个死囚犯能挽救长安,时限为十二个时辰,进而引发惊心动魄的故事。
在这里插入图片描述
在第一集中便出现了一个让猪哥好奇的专业术语“大案牍术
在这里插入图片描述
于是带着疑问我就去问百度,还别说真有。
在这里插入图片描述
可是,百度百科=白说,然后在弹幕君的指点下才知道这大案牍术就相当于我们今天的大数据分析,最后不忘修改下百度百科。
在这里插入图片描述
然后我便不再对这大案牍术感到好奇,而是对弹幕大军产生兴趣,好奇大家为什么都喜欢看这部剧,大家的共同点在哪里?这部剧有哪些吸引大家的地方?

二、功能描述

因最近刚好我们在讲爬虫与数据分析,所以就想用我们现代的大案牍术来分析一下这不电视剧到底为什么会火,大家都对这部电视剧的评价是什么样的?(所有弹幕最高频的900个词)
在这里插入图片描述

三、技术方案

  1. 分析某酷弹幕加载方式然后用requests库爬取
  2. 需大量抓取数据,近可能多
  3. 重点做数据清洗,比如:剧情、人名、高能君弹幕等等
  4. 将弹幕做成云词

四、技术实现

猪哥将会详细的讲解每一步的过程,希望感兴趣的同学可以认真阅读,然后自己动手实践,这样才能真的学习到知识。

本教程只为学习交流,不得用于商用获利,后果自负!
如有侵权或者对任何公司或个人造成不利影响,请告知删除

1.分析并获取弹幕接口的URL

第一步:打开某酷网站,然后点击电视剧播放,在页面中鼠标右键选择检查(或F12)调出浏览器的调试窗口。
在这里插入图片描述
第二步:复制任意一条弹幕,然后点击调试窗口按Control+F进行搜索!
在这里插入图片描述
第三步:点击该请求的Headers按钮,查看请求url,并且注意请求头中的RefererUser-Agent参数。
在这里插入图片描述
只需通过以上三步弹幕加载的url便被我们找到:

https://service.danmu.youku.com/list?jsoncallback=jQuery111205151507831610791_1562918614483&mat=0&mcount=1&ct=1001&iid=1061156738&aid=322943&cid=97&lid=0&ouid=0&_=1562918614486

2.爬取弹幕数据

URL找到之后我们便可以开始coding了,还是老规矩:先从一条数据的抓取、提取、保存,这些都没问题之后我们再研究批量抓取。

这里我们依然是用我们的requests库来操作,不知道requests库是什么东西的老铁们先看看这篇文章:requests库介绍
在这里插入图片描述
有了上次的教训,我们这次直接把请求头加上,一次就把弹幕数据爬取到手。

3.数据提取

第一步:提取json数据
我们观察返回的数据会发现,和上一篇一样,跨域请求都是用的是jsonp,所以我们需要对返回的数据进行稍微的截取,就是将外面的jQuery111203412576115734338_1562833192066(和最后的)去掉,只保留中间的json数据。
在这里插入图片描述
这里我们和上篇做了一个小小的改动:猪哥使用r.text.index('(')获取到了回调函数的左括号的角标,然后再用这个角标去做切片,这样的好处是可以通用,即使jsonp返回函数名长度改变也不影响。

第二步:提取弹幕数据
得到json之后,我们就来分析弹幕数据在哪里,我们可以在浏览器的调试窗口的Preview里面查看
在这里插入图片描述
可以看到result字段里面便是弹幕数据,而且他的数据格式是一个列表,列表中是每个弹幕对象,弹幕对象中的content字段就是实际的弹幕内容,好那我们用json把他们提取并打印出来。
在这里插入图片描述

4.数据保存

想要的数据提取出来之后,我们就可以把数据保存。数据保存我们还是使用文件来保存,原因是操作方便,满足需求。
在这里插入图片描述

5.批量爬取

完成一次请求请求的爬取、提取、保存之后,我们来研究下如何批量保存数据。这里和其他批量爬取有所区别:如何爬取多集的批量数据?

在遇到问题和困难时,猪哥总是喜欢把事情或者工作量化,然后再细化,分步解决!

这里我们就把批量爬取分为两步:第一步批量爬取一集的所有弹幕;第二步爬取多集的弹幕!

第一步:爬取某一集所有弹幕
批量爬取的关键就在于找到分页参数,找分页的技巧就是:比较两个请求url的参数,看看有何不同。
在这里插入图片描述
我们比较同一集第一次请求与第二次请求的url发现mat参数不同,而且还是依次递增的趋势,这个参数便是我们寻找的分页参数(其实mat参数表示分钟数,表示获取第几分钟的弹幕),找到分页参数后我们就可以对原方法改造,改造思路:

将原url中分页参数变为可变参数,由方法传入。然后新建一个批量爬取的方法,循环调用单次爬取方法,每次调用传入页数即可!

在这里插入图片描述
第二步:爬取多集的所有弹幕
这一步的关键在于找到代表集数的参数,我们可以同样可以使用对比的方法:比较第一集与第二集的第一个弹幕请求URL,从而找到不同参数!
在这里插入图片描述
我们发现第一集的iid=1061156738、第二集的iid=1061112026,但是这个iid参数并不是递增,如何找到规律?

这时候我们还是要回到网页中寻找答案,我们复制第一集的iid值1061156738到浏览器的调试窗口搜索,找到iid就是某接口的vid值。
在这里插入图片描述
找到集数参数之后,我们就可以写一个函数将所有集数参数爬取到。
在这里插入图片描述
令牌为空?很奇怪,URL和headers我们都填了为什么还是不行?而浏览器却可以?

这里需要引入另一个请求头:Cookie,Cookie是干什么的?

因为HTTP协议是无状态协议,也就是说下次再请求服务器并不知道你是谁,所以就用Cookie和Seesion来记录状态,最简单的例子就是用户登录后,服务器就给浏览器遗传一串加密字符串(key),然后服务器自己缓存一个key-value,这样浏览器每次来请求都带上这个key,服务器就知道你是哪个用户!

由于篇幅有限今天只给大家简单介绍,考虑其重要性,后面猪哥会专门写一篇文章介绍Cookie。

那我们去哪里找Cookie呢?答案当然是浏览器咯!
在这里插入图片描述
那这么多Cookie到底哪个才是我们要找的那个?这个谁也不知道,也不用找,我们直接把所有Cookie复制到代码里面就可以。

但是这种表格形式的根本无法复制,有没有什么小技巧能方便我们复制Cookie吗?当然有,我们点击浏览器调试窗口的Console按钮,然后输入document.cookie就可以看到全部Cookie啦,直接复制出来就可以,是不是很方便!
在这里插入图片描述
我们把Cookie复制到代码里试试吧,注意Cookie有过期时间,尤其是这个token大概十几分钟可能就会过期,过期之后在浏览器中重新复制即可!
在这里插入图片描述
我们可以观察到返回的数据同样是个jsonp函数,同样需要提取内部的json数据,所以我们可以封装一个公用方法,用于提取jsonp返回的数据转为json对象,这样提高了复用性!
在这里插入图片描述
得到json数据之后没我们通过观察可以得到知其数据结构,然后将vid提取出来并返回,上图猪哥返回了一个生成器!

代表集数的id拿到了,现在我们就可以双层循环去爬所有的弹幕啦,上代码。
在这里插入图片描述
一共爬取了近30万条的数据,大概用了40分钟,当然如果你觉得时间间隔太长也可缩短,但是建议不要太频繁,不然对人家服务器或者被监控到就不好!
在这里插入图片描述

6.数据清洗+生成词云

我们要清洗什么数据?其实这个事先很难猜到,所以我们不做数据清洗直接生成云词看看会是什么效果,然后再做调整。关于云词的生成介绍猪哥在上篇爬取京东商品评价并生成词云已经为大家讲过!

在这里插入图片描述
我们可以看到右侧生成的词云,像:哈哈、不是、这个、什么等这些词比较多,这种单词没有太大的分析价值,所以我们数据清洗便有了方向。(ps:某酷的弹幕没啥内涵。。。)
在这里插入图片描述
猪哥添加了一份清洗词列表,这样就可以将这些词屏蔽掉,然后我们再来看看效果吧!
在这里插入图片描述

7.分析词云图

从上面的词云图中我们可以分析出:

  1. 此电视剧中的一些主角:张小敬、李必、崔器、龙波、徐斌、竟然还有人喜欢曹破延。
  2. 有人说好看,有人说看不懂,说明剧情可能有点深度
  3. 画风可能有点像刺客信条
  4. 四字弟弟、千玺,说明剧中有易烊千玺
  5. 片尾曲可能有惊喜
  6. 大唐、长安说明了故事背景
  7. 弹幕、智商,可能大家在提醒你:关弹幕,保智商!

目前此剧已更新完第一季(20集),真的是一部国产良心剧,画质、服装、礼节、拍摄、剧本、演技都堪称一流,推荐大家看看!

五、总结

我们来从技术层面分析总结一下今天这篇文章,本篇文章看似与上一篇爬取京东商品评价并生成词云流程很类似,但是更难一点:

  1. 此次爬取的弹幕不仅要找分页参数,而且要找分集的参数
  2. 这次爬取弹幕需要用到Cookie,而且有过期时间
  3. 此次数据量大,对电脑性能可能会有点考验
  4. 在生成词云时有数据清洗

周末、瓜子花生和啤酒 、看剧编程两不误,人生岂不美滋滋!

项目地址:https://github.com/pig6/youku_danmu_spider
在这里插入图片描述

相关文章: