python 爬取腾讯视频评论的实现步骤


Posted in Python onFebruary 18, 2021

一、网址分析

查阅了网上的大部分资料,大概都是通过抓包获取。但是抓包有点麻烦,尝试了F12,也可以获取到评论。以电视剧《在一起》为例子。评论最底端有个查看更多评论猜测过去应该是 Ajax 的异步加载。
网上的大部分都是构建评论的网址,通过 requests 获取,正则表达式进行数据处理。本文也利用该方法进行数据处理,其实利用 scrapy 会更简单。
根据前辈给出的经验,顺利找到了评论所在的链接。

python 爬取腾讯视频评论的实现步骤

在新标签中打开,该网址的链接。

python 爬取腾讯视频评论的实现步骤

评论都在"content":"xxxxx"里面,所有可以通过正则表达式获取。
那么现在要开始构建网址,找到其规律。
在查找评论链接的过程中无意发现,点击影评旁边的评论总数,可以获取到更为干净的评论界面。结果是一样的。

python 爬取腾讯视频评论的实现步骤

既然是要爬取所有的评论,所以知道评论数是必不可少的。

python 爬取腾讯视频评论的实现步骤

再通过F12获取到评论链接,找到网址的规律,构建网址,加载三四个评论就行了。这里加载了四个网址。把所有网址复制到文本文件中,进行对比分析。

python 爬取腾讯视频评论的实现步骤

观察发现只有 cursor 和 source 进行了改变,其他是不变的,二 source 是在第一个的基础上进行加一操作,所以只需要获取到 cursor 即可。我们打开一个评论链接的网址,我们可以知道,cursor 其实是上一页 最后一个用户的ID码。所以我们只需要在爬取上一页的时候一起爬虫了。然后就可以构建网址。

python 爬取腾讯视频评论的实现步骤

二、代码编写

这个代码还是简单的。套用之前上课做的模板就可以直接进行爬虫了。
通过正则表达式获取评论,返回一个列表;
正则表达式获得的 cursor 码是列表,所以要转化为字符串使用;
source 很简单了,直接在上一个的基础上加一即可。

def getComment(html): # 爬取单页评论

 findeComment = re.compile(r'"content":"(.*?)"', re.S)
 comment = re.findall(findeComment, html)
 # print(comment)
 return comment

def getCursor(html): # 获取下一页的cursor码
 findeCursor = re.compile(r'"last":"(.*?)"', re.S)
 cursor = re.findall(findeCursor, html)[0]
 # print(cursor)
 return cursor


def getSource(source): # 获取下一页的source码
 source = int(source) + 1
 return str(source)

有点难度的可能就送弄代理吧,但是代理可以模仿网上其他人的写法,所以还是不是很难。

#添加用户代理

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)

三、遇到的问题

1. 获取评论的时候也将子评论爬虫进去了。

仔细查看了源码,发现评论主要在 data 下面的 oriCommList 列表里,其他范围的评论为子评论。个人认为子评论也算有效评论,目前不打算处理。

python 爬取腾讯视频评论的实现步骤

2. 获取全部评论数,直接通过 requests 获取不到

尝试了 xpath 和 requests 发现不能获取全部评论数,所以目前只能通过 selenium 获取,但是 selenium 效率太低了,就获取一个评论总数,还不如打开源码直接修改评论总数,所以暂时没有修改

3. 评论总数数据太大

因为之前爬虫过很多网站,同一个 user-agent 很容易被 ban ,所以目前构建了用户代理,然后进行随机。其实还想加一个 ip 代理的,但是使用了 ip 代理的网址,上面写的正常的 ip ,在使用的时候,拒绝连接。也尝试过构建代理池。但是代理池一般都是使用docker 和 Redis 进行获取。暂时没有选用,之选用了用户代理,然后在获取 headers 的时候加个 time.sleep(1)。目前还是正常的。

4. 报错'utf-8' codec can't decode byte 0xff in position 1: invalid start byte

遇到这个问题,实在无语,我怀疑后面的评论是新出的 emjoy,然后utf-8不能识别,程序挂掉了。但是选取其他格式,在解释的过程估计还会挂掉,就暂时爬到1万条吧。

python 爬取腾讯视频评论的实现步骤

四、完整代码

代码仓库

以上就是python 爬取腾讯视频评论的实现步骤的详细内容,更多关于python 爬取腾讯视频评论的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的exec、eval使用实例
Sep 23 Python
Python3.2模拟实现webqq登录
Feb 15 Python
解析Python中的__getitem__专有方法
Jun 27 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
Python数据结构与算法(几种排序)小结
Jun 22 Python
python3.8下载及安装步骤详解
Jan 15 Python
NumPy排序的实现
Jan 21 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
Django操作session 的方法
Mar 09 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 Python
Python matplotlib绘制雷达图
Apr 13 Python
Python之qq自动发消息的示例代码
Feb 18 #Python
Python对excel的基本操作方法
Feb 18 #Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 #Python
Python操作Excel的学习笔记
Feb 18 #Python
手把手教你用Django执行原生SQL的方法
Feb 18 #Python
python中封包建立过程实例
Feb 18 #Python
python解包用法详解
Feb 17 #Python
You might like
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
asp.net和php的区别点总结
2019/10/10 PHP
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
javascript基本语法
2016/05/31 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python Flask-web表单使用详解
2017/11/18 Python
python调用java的jar包方法
2018/12/15 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
如何在python中实现线性回归
2020/08/10 Python
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
技术比武方案
2014/05/19 职场文书
装配出错检讨书
2014/09/23 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
三好学生个人总结
2015/02/15 职场文书