查看原文
其他

以『山河令』为实战案例,手把手教会你用Python爬取『优酷』视频评论

李运辰 Python研究者 2022-07-01

大家好,我是辰哥。


最近在网上搜了各大技术博客平台以及开源代码,都没有最新爬取『优酷』视频评论的文章或者案例。以前(2020之前)的爬取『优酷』视频评论的方法现在也都不适用(优酷新加了加密反爬)。所以今天辰哥就手把手教大家爬取『优酷』视频评论



是的,你没看错,辰哥选择了『山河令』作为实战案例。『山河令』刚开播就天天在优酷热播榜首优酷独播),热度到现在也一直都没减。


其实在五一的时候,辰哥就想爬取『山河令』的视频评论,奈何优酷平台的视频评论有逆向加密反爬。一直到今天之前都没有解决。不过现在既然辰哥发出来了,说明已经爬取成功了。(实际上最开始的加密反爬没有解决,辰哥换了另外一种方法




01加密反爬



在开始说最终的解决方法之前,先给大家介绍一下『优酷』的加密反爬(辰哥没有搞定,如果有大佬或者感兴趣的可以去研究一下,跟辰哥探讨一起解决)。


咱们这么以『山河令』的第一集为例,爬取视频评论。


https://v.youku.com/v_show/id_XNTEwMTg0NjE5Mg==.html?spm=a2h0c.8166622.PhoneSokuProgram_1.dselectbutton_1&showid=ceba4745ea10415eb791



评论信息如下:



在页面下方有:查看更多评论



点击之后方面页面链接没有变化,说明是Ajax异步加载,我们去network里面查看数据包。可以成功找到对应的响应数据。


1.数据包响应内容



可以在页面上看到响应的数据(视频评论)


2.请求链接和参数



上面这个是请求链接



这是请求参数,可以看到是get请求。ok竟然知道这些,那么我们可以在python里面构建数据包


3.构造数据包


上面就是通过python代码构造的数据包,请求之后,可以成功返回数据



以为成功了!NO NO NO


4.加密反爬


上面的结果看着是成功了,实际上是没有成功的,为什么这么说,接着辰哥给你分析一下。


反爬:

sign授权验证有效期(约2分钟失效),也就是说,这个链接2分钟就失效了。



可以看到请求参数里面有sign参数吧。通过js逆向看到,这个sign是通过其他的一些参数进行hash而来。这里的一些指多少个没明确。辰哥也时候过进行从1个到全部的测试hash,但是都失败。


辰哥的hash代码如下:


这个sign参数的获得就是『优酷』的加密反爬,辰哥没有搞定,就测试了另一种方法。




02Selenium自动化



看到Seleium大家应该都不陌生。辰哥就是使用了Seleniumn方式去采集到了『优酷』的视频评论。


1.安装Selenium


通过下面命令可以安装


pip install Selenium


Selenium3.x调用浏览器必须有一个webdriver驱动文件。

 

  1. Chrome驱动文件下载

    https://chromedriver.storage.googleapis.com/index.html?path=2.35/

  2. Firefox驱动文件下载

    https://github.com/mozilla/geckodriver/releases


2.采集实战


在使用Selenium之前,先引入库


from selenium import webdriver


然后引入webdriver,我这里是下载好之后放在D盘下面(辰哥这里使用chrome)


#1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口browser = webdriver.Chrome(executable_path ="D:\chromedriver.exe")


然后开始请求目标网页(山河令:第一集


#2.通过浏览器向服务器发送URL请求browser.get("https://v.youku.com/v_show/id_XNTEwMTg0NjE5Mg==.html?spm=a2h0c.8166622.PhoneSokuProgram_1.dselectbutton_1&showid=ceba4745ea10415eb791")


完整请求代码如下:

运行代码之后,自动打开浏览器



请求到之后开始进行对应页面自动化操作


3.到达页面底部


评论是在页面的底部(因为页面滚动到底部,才会加载出来评论),我们需要让页面到底部加载出评论到页面

其效果如下:



因为评论加载出来了,页面变长了,所以一开始的底部就只是靠近中间位置。



4.解析网页


既然评论数据加载到网页了,可以使用xpath对网页进行解析,提取出评论数据。先看一下页面标签



可以看到评论列表是在class标签comment-list-all,每一条评论都在class标签

comment-list-item里,内容是在class标签comment-list-content-text里。清楚这些之后,可以开始编写代码,进行解析。

打印输出:



内容输出没问题,最后还打印输出了评论数(10条,这里是10条是指这一页的),下面尝试爬取下一页。


5.爬取下一页


在分析之前,先看一下页面是如何加装下一页评论的



可以看到页面点击:查看更多评论,页面是异步加载下一页评论。既然知道这些,那么可以使用selenium模拟点击完成这步操作。


sleep(1)#滚动到底部js = "window.scrollTo(0,document.body.scrollHeight)"browser.execute_script(js)


查看更多评论在页面底部,所以先滚动到页面底部。前面的sleep(1)是等待页面加载完毕,1秒后再开始滚动。


#点击:查看更多评论elem1=browser.find_element_by_link_text("查看更多评论")elem1.click()sleep(1)


sleep(1)是等待1秒后点击。点击后就可以解析数据了。代码如下:

打印输出:



这里可以看到已经获取到加载后的数据,同时还作了对比,点击:查看更多评论前是10条评论,点击后再加载10条,那么可以获取到20条。


思路提示可以将上面这个图中代码放到循环中,那样就可以一直爬取下一页。加入去重进制就可以避免重复保存之前已采集的内容。(这个就留给大家去发挥,动动手)。


最后附上运行的效果:




03小结


本文主要讲解如何去爬取优酷视频评论,并且以山河令为案例进行演示。


最后说一声:原创不易,求给个赞、在看、评论


为了大家方便学习,辰哥已经把本文的完整源码上传,需要的小伙伴在公众号后台回复:山河令


这两天辰哥会把本文讲解视频上传到B站,感兴趣的小伙伴可以点击:阅读原文,关注辰哥的B站账号。


推荐阅读

听说你到现在还不会爬取携程评论?

实际上采集全网视频也没那么难

实战|惊呆了,Python竟然能剪辑视频!

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

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