如何查找网络流中的JSON文件,用Python+Selenium爬取全部评论文本
操作指引:Python + Selenium 抓取评论接口JSON并提取评论文本
第一步:前置环境准备
- 安装依赖包:执行命令
pip install selenium selenium-wire json,selenium-wire是Selenium的扩展包,支持直接捕获浏览器网络流,比原生Selenium更适合本次需求 - 配置对应浏览器的WebDriver,确保WebDriver版本和你本地使用的浏览器版本完全匹配
第二步:手动定位评论接口特征
先手动打开目标页面,按F12打开开发者工具,切换到「网络」面板,筛选「Fetch/XHR」类型,滑动页面加载更多评论,找到返回评论内容的请求:
- 点击请求查看「响应」标签,确认内容包含评论文本后,记录该请求的URL特征、请求方法、参数规则,比如URL中包含
comment、review这类关键词
第三步:编写代码启动浏览器并加载全部评论
示例代码如下,根据你的实际场景替换对应参数即可:
from seleniumwire import webdriver import json import time # 初始化Chrome浏览器,也可替换为Firefox等其他浏览器 driver = webdriver.Chrome() # 替换为你的目标页面URL driver.get("https://xxx.xxx/xxx") # 等待页面初始加载完成,可根据网络速度调整时长 time.sleep(3) # 模拟滚动加载全部评论,避免只抓到第一页内容 last_height = driver.execute_script("return document.body.scrollHeight") while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) new_height = driver.execute_script("return document.body.scrollHeight") # 滚动后页面高度无变化,说明已经加载完全部内容 if new_height == last_height: break last_height = new_height
第四步:提取JSON响应中的评论文本
遍历所有捕获的网络请求,匹配之前记录的评论接口特征,解析JSON提取评论文本:
all_comments = [] for request in driver.requests: # 替换为你之前记录的评论接口URL特征 if "comment" in request.url and request.response: try: # 解析响应为JSON格式 response_json = json.loads(request.response.body.decode('utf-8')) # 以下提取路径需根据实际接口返回的JSON结构调整 # 示例为接口返回结构为{"code":0,"data":{"comments":[{"content":"评论内容"},...]}}的场景 comments_list = response_json.get('data', {}).get('comments', []) for item in comments_list: comment_content = item.get('content', '').strip() if comment_content: all_comments.append(comment_content) except json.JSONDecodeError: continue # 爬取完成后关闭浏览器 driver.quit()
第五步:处理爬取结果
可以直接打印查看,或者保存到本地文件:
# 打印所有评论 for idx, comment in enumerate(all_comments, 1): print(f"第{idx}条评论:{comment}") # 保存到本地TXT文件 with open("comments.txt", "w", encoding="utf-8") as f: for comment in all_comments: f.write(comment + "\n")
注意事项:
- 部分网站的评论接口有请求头校验,若解析失败可以给Selenium配置和浏览器正常请求一致的UA、Cookie等参数
- 滚动等待时间可以根据网站加载速度调整,避免没加载完就触发下一次滚动
- JSON提取路径一定要和实际接口返回的结构对应,建议先打印完整的
response_json确认结构再写提取逻辑
内容的提问来源于stack exchange,提问作者Kachen Tathong
相关产品推荐
相关产品推荐

