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结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
Python实现批量压缩图片
Jan 25 Python
Python paramiko模块的使用示例
Apr 11 Python
Python装饰器原理与用法分析
Apr 30 Python
python保存数据到本地文件的方法
Jun 23 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
python找出因数与质因数的方法
Jul 25 Python
pygame实现成语填空游戏
Oct 29 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
PDO::_construct讲解
2019/01/27 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
Python修改MP3文件的方法
2015/06/15 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
浅析python内置模块collections
2019/11/15 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
python中reload重载实例用法
2020/12/15 Python
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js