Python爬取腾讯视频评论的思路详解


Posted in Python onDecember 19, 2019

一、前提条件

  • 安装了Fiddler了(用于抓包分析)
  • 谷歌火狐浏览器
  • 如果是谷歌浏览器,还需要给谷歌浏览器安装一个SwitchyOmega插件,用于代理服务器
  • 有Python的编译环境,一般选择Python3.0及以上

声明:本次爬取腾讯视频里 《最美公里》纪录片的评论。本次爬取使用的浏览器是谷歌浏览器

二、分析思路

1、分析评论页面

Python爬取腾讯视频评论的思路详解

根据上图,我们可以知道:评论使用了Ajax异步刷新技术。这样就不能使用以前分析当前页面找出规律的手段了。因为展示的页面只有部分评论,还有大量的评论没有被刷新出来。

这时,我们应该想到使用抓包来分析评论页面刷新的规律。以后大部分爬虫,都会先使用抓包技术,分析出规律!

2、使用Fiddler进行抓包分析——得出评论网址规律

fiddler如何抓包,这个知识点,需要读者自行去学习,不在本博客讨论范围。

Python爬取腾讯视频评论的思路详解
Python爬取腾讯视频评论的思路详解

把上面两张图里面的内容对比一下,可以知道这个JS就是评论存放页面。(这需要大家一个一个找,一般Ajax都是在JS里面,所以这也找JS进行对比即可)

我们复制这个JS的url:右击 > copy > Just Url

大家可以重复操作几次,多找几个JS的url,从url得出规律。下图是我刷新了4次得到的JS的url:

Python爬取腾讯视频评论的思路详解

根据上图,我们发现url不同的地方有两处:一是cursor=?;二是_=?。

我们很快就能发现 _=?的规律,它是从1576567187273加1。而cursor=?的规律看不出来。这个时候找到它的规律呢?

(1)百度一下,看前人有没有爬取过类型的网站,根据他们的规律和方法,去找出规律;

(2)羊毛出在羊身上。我们需要有的大胆想法——会不会这个cursor=?可以根据上一个JS页面得到呢?这只是很多大胆想法中的一个,我们就一个想法一个想法的试试。

我们就采用第二种方法,去js里面找。复制其中一个url为:

url = https://video.coral.qq.com/varticle/3242201702/comment/v2?callback=_varticle3242201702commentv2&orinum=10&oriorder=o&pageflag=1&cursor=6460163812968870071&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1576567187273

去浏览器里面打开,在里面搜索一下此url的下一个url的cursor=?的值。我们发现一个惊喜!

Python爬取腾讯视频评论的思路详解

如下:

一般情况下,我们还要多试几次,确定我们的想法是正确的。

至此,我们发现了评论的url之间的规律:

  • _=?从1576567187273加1
  • cursor=?的值存在上面一个JS中。

三、代码编写

import re
import random
import urllib.request

#构建用户代理
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/3242201702/comment/v2?callback=_varticle3242201702commentv2&orinum=10&oriorder=o&pageflag=1&cursor="+lastId+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_="+str(page)
 html=urllib.request.urlopen(url).read().decode("utf-8","ignore")
 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():
 ua(uapools)
 #初始页面
 page=1576567187274
 #初始待刷新页面ID
 lastId="6460393679757345760"
 for i in range(1,6):
 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]))
 #获取下一轮刷新页ID
 lastId=get_lastId(html)
 page += 1

main()

四、结果展示

Python爬取腾讯视频评论的思路详解

总结

以上所述是小编给大家介绍的Python爬取腾讯视频评论,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
Python日期时间Time模块实例详解
Apr 15 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
python之列表推导式的用法
Nov 29 Python
django框架中间件原理与用法详解
Dec 10 Python
Python3开发环境搭建详细教程
Jun 18 Python
Python request中文乱码问题解决方案
Sep 17 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 #Python
pandas中read_csv的缺失值处理方式
Dec 19 #Python
python错误调试及单元文档测试过程解析
Dec 19 #Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 #Python
解决Python列表字符不区分大小写的问题
Dec 19 #Python
简单了解为什么python函数后有多个括号
Dec 19 #Python
解决Python使用列表副本的问题
Dec 19 #Python
You might like
基于mysql的论坛(4)
2006/10/09 PHP
PHP中,文件上传
2006/12/06 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
php 地区分类排序算法
2013/07/01 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
python计算方程式根的方法
2015/05/07 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
python set集合使用方法解析
2019/11/05 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
学校就业推荐信范文
2014/05/19 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
2014年平安夜寄语
2014/12/08 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
Java设计模式之代理模式
2022/04/22 Java/Android