import requests
import json
import time
# 请求头部信息,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
}
# 视频ID
video_id = 'f8c487c05f613c43b9b5f148f36b8744'
# 初始化session,保持会话
session = requests.Session()
# 分页参数
page = 1
page_size = 20
# 存储评论的列表
comments = []
# 循环抓取评论,直到没有更多评论
while True:
# 构建Ajax请求的URL
url = f'https://video.coral.qq.com/varticle/935582928/comment/v2?video_id={video_id}&tid=0&pid=0&source=1&comment_id=0&score=0&size={page_size}&cursor=&order=0&platform=11&is_jsonp=false&callback=_varticle935582928commentv2'
# 发送请求
response = session.get(url, headers=headers)
# 解析JSON数据
data = json.loads(response.text.lstrip('_varticle935582928commentv2(').rstrip(');'))
# 检查是否有新的评论数据
if data['data']['cursor']['has_next']:
# 更新分页参数
cursor = data['data']['cursor']['next']
page += 1
else:
# 没有更多评论,退出循环
break
# 将评论内容存储到列表中
comments.extend([comment['content'] for comment in data['data']['comments']])
# 防止被限流,设置每次请求间隔
time.sleep(2)
# 打印抓取到的评论内容
for comment in comments:
print(comment)
这段代码使用了requests
库来模拟发送HTTP请求,并使用json
库来解析JSON响应。通过循环抓取腾讯视频的评论,直至没有更多评论为止。每次请求都设置了合适的headers,以模拟浏览器访问,并且在每次请求之间有2秒的间隔,以防止触发防爬机制。最后,打印出抓取的评论内容。