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中对元组和列表按条件进行排序的方法示例
Nov 10 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
python实现烟花小程序
Jan 30 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
Python基础之函数的定义与使用示例
Mar 23 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
python安装和pycharm环境搭建设置方法
May 27 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 Python
Python安装使用Scrapy框架
Apr 12 Python
Python加密与解密模块hashlib与hmac
Jun 05 Python
python运行脚本文件的三种方法实例
Jun 25 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
php查看当前Session的ID实例
2015/03/16 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
PHP中list方法用法示例
2016/12/01 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
Add a Table to a Word Document
2007/06/15 Javascript
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
python实现学生信息管理系统
2020/04/05 Python
深入了解Django View(视图系统)
2019/07/23 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
Python新手学习函数默认参数设置
2020/06/03 Python
python如何调用java类
2020/07/05 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
总务岗位职责
2013/11/19 职场文书
公司拓展活动方案
2014/02/13 职场文书
求职信名称怎么写
2014/05/26 职场文书
小学生反邪教心得体会
2016/01/15 职场文书