python爬虫:Ajax异步爬取数据(b站评论区)
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/58.0.3029.110 Safari/537.3',
'Referer': 'https://www.bilibili.com/video/BV1x44y1X7zq'
}
# 视频cid,通过分析请求URL可以找到
cid = '78974370'
# 初始化起始页码和每页的评论数
page = 1
page_size = 20
# 存储评论数据
comments = []
# 循环抓取每一页的评论数据
while True:
# 构建AJAX请求的URL
url = f'https://api.bilibili.com/x/v2/reply/main?oid=168481317&type=1&pn={page}&nohot=1&sort=0'
# 发送请求
response = requests.get(url, headers=headers)
if response.status_code == 200:
# 解析JSON数据
data = response.json()
if data['code'] == 0:
# 提取评论数据
for comment in data['data']['replies']:
comments.append({
'author': comment['member']['uname'],
'content': comment['content']['message'],
'like_count': comment['like'],
'time': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(comment['ctime'])),
})
# 检查是否还有更多页
if len(data['data']['replies']) < page_size:
break
page += 1
else:
print(f"请求失败,错误代码:{data['code']}")
break
else:
print("请求失败,无法连接到服务器")
break
# 输出评论数据
for comment in comments:
print(f"作者:{comment['author']}, 内容:{comment['content']}, 点赞数:{comment['like_count']}, 时间:{comment['time']}")
这段代码使用了requests库来发送HTTP请求,并使用json模块来解析JSON数据。它模拟了浏览器的请求头,并通过循环抓取不同页的评论数据。每个评论包含作者、内容、点赞数和评论时间,并将其存储在列表中。在实际应用中,可以对数据进行进一步的处理和分析。
评论已关闭