Python爬虫--Ajax异步抓取腾讯视频评论

在某些网站 ,当我们滑下去的时候才会显示出后面的内容

就像淘宝一样,滑下去才逐渐显示其他商品

这个就是采用 Ajax 做的

然后我们现在就是要编写这样的爬虫。

规律分析:

这个时候就要用到我们的 Fiddler

我们需要分析加载评论的规律

首先使用火狐浏览器随便打开一个视频,注意设置好代理

然后打开 Fiddler 抓包 ,然后再点击查看更多评论,

拿魔道祖师演示吧,毕竟我也喜欢看

就是这个位置


然后查看 Fiddler

抓到的东西就很多杂七杂八的了,

有链接啊,图片什么的,这些显然不是评论


然后查看一个 js 文件 ,发现这就是我们想要的评论


然后把评论的 url 复制出来分析规律

右键点击 js 链接,然后再选择 Copy --> Just Url


如果一条分析不了,那么我们就多加载一两条看看

这样我们就有了三条做分析了


首先看这个地方,

这个应该是这部视频的 id 2850613872


接下来是评论 id

但是貌似 id 都不一样,我可以打开评论链接看看有没有规律


打开第一个评论链接,

然后发现第一个评论链接里的 last 6426734762166565246 正好是第二条评论链接里面的 id

然后查看其他的,发现依旧如此

然后我们就得到了一个结论,

就是第一条评论链接里面的 last id 等于 第二条评论链接里面的 id


发现评论 id 的规律后,

接下来就是评论了

评论内容在 content 里面


后面这个字符串的话

前十位是时间戳,后面三位没有发现有啥规律

太菜了我

推测可能是评论数

不过有没有这个字符串短时间内不影响我们获取评论内容

这个感觉就是一个时间限制,在一定时间内有效


只抓取一页的评论:

知道规律后

可以试试抓取评论内容

接下来我们尝试只抓取一个链接里面的内容

代码:

复制代码
import urllib.request
import re
import time

headers = (

	"User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"

	)

opener = urllib.request.build_opener()

opener.addheaders = [headers]

urllib.request.install_opener(opener)

video_id = "2850613872"

comment_id = "6422202556761345058"

url = "https://video.coral.qq.com/varticle/"+video_id+"/comment/v2?callback=_varticle2850613872commentv2&orinum=10&oriorder=o&pageflag=1&cursor="+comment_id+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1566709851532"

path = '"content":"(.*?)",'

data = urllib.request.urlopen(url).read().decode("utf-8")

resut = re.compile(path).findall(data)

print(resut)

然后就获取到了一页的评论 😂😂 ❤❤ 🙃🙃 (눈_눈)(눈_눈)

😡😡 😊😊 😄😄 🤣🤣 😒😒 🤬🤬 😘😘


自动抓取全部评论:

接下来就要抓取全部评论了

思路:

获取 last id 作为下一次链接的评论 id

代码:

复制代码
import urllib.request
import re
import time

try:

	headers = (

	"User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"

	)

	opener = urllib.request.build_opener()

	opener.addheaders = [headers]

	urllib.request.install_opener(opener)

	video_id = "2850613872"  #  视频 id

	comment_id = "6422202556761345058"  #  初始评论 id

	for i in range(1,6):

		print("第"+str(i)+"页")

		url = "https://video.coral.qq.com/varticle/"+video_id+"/comment/v2?callback=_varticle2850613872commentv2&orinum=10&oriorder=o&pageflag=1&cursor="+str(comment_id)+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1566709851532"

		content_path = '"content":"(.*?)",'  #  评论内容正则

		last_path = '"last":"(.*?)",'  #  last id 正则

		content_data = urllib.request.urlopen(url).read().decode("utf-8")

		content = re.compile(content_path).findall(content_data)  #  获取评论

		last_id = re.compile(last_path).findall(content_data)  # 获取 last id

		for j in last_id:  #  获取的 last id 是列表类型,要进行类型转换

			comment_id = j

		# print(comment_id)

		print(content)  #  输出获取的评论

except Exception as error:

	print(error)

然后成功获取到评论

运行截图

相关推荐
zone77394 小时前
001:简单 RAG 入门
后端·python·面试
F_Quant4 小时前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统
允许部分打工人先富起来5 小时前
在node项目中执行python脚本
前端·python·node.js
IVEN_5 小时前
Python OpenCV: RGB三色识别的最佳工程实践
python·opencv
haosend6 小时前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽6 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
IVEN_1 天前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang1 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮1 天前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling1 天前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python