如何使用Selenium的driver.page_source将网页JSON响应正确写入JSON文件?
解决Selenium爬取JSON响应后写入文件的格式问题
你遇到的核心问题其实有两个:一是Selenium默认拿到的是浏览器渲染后的HTML页面(而非纯JSON内容),二是后续处理时错误地把字符串当成JSON对象写入,导致出现转义字符。这里给你两个针对性的解决方案:
方案一:针对Selenium的正确处理方式
既然浏览器把JSON内容包裹在了<pre>标签里,我们可以直接定位这个标签提取纯JSON文本,再解析成Python对象后写入文件,彻底避免转义问题:
from selenium import webdriver import json url = "website.json" driver = webdriver.Chrome() # 替换为你实际使用的浏览器驱动 driver.get(url) # 定位pre标签,直接获取里面的纯JSON文本 pre_element = driver.find_element("tag name", "pre") raw_json_text = pre_element.text # 将JSON字符串解析为Python字典/列表对象 json_data = json.loads(raw_json_text) # 写入规范的JSON文件 with open("data.json", "w", encoding="utf-8") as outfile: json.dump(json_data, outfile, indent=2, ensure_ascii=False) driver.quit()
为什么这个方法有效?
- 直接从
<pre>标签提取文本,跳过了HTML标签的干扰,拿到的是原始的JSON内容; - 用
json.loads()把字符串转成Python原生的数据结构(字典/列表),再用json.dump()写入时,会自动生成格式规范的JSON,不会出现多余的转义字符。
方案二:跳过Selenium,直接用请求库获取(更高效)
如果这个URL本身就是直接返回JSON数据(不需要浏览器渲染页面),其实完全没必要用Selenium,用requests库直接请求会更简单高效:
import requests import json url = "website.json" response = requests.get(url) json_data = response.json() # 直接将响应解析为JSON对象 with open("data.json", "w", encoding="utf-8") as outfile: json.dump(json_data, outfile, indent=2, ensure_ascii=False)
你之前的方法为什么会出现转义?
你之前用json.dump(t2, outfile, indent=2)时,t2是一个字符串类型的JSON内容。json.dump()的作用是把Python对象转成JSON格式,它会把这个字符串当成JSON的一个"字符串值"来处理,所以自动给所有引号加上了转义符,最终生成的是一个包含JSON字符串的JSON文件,而非你想要的纯JSON结构。
内容的提问来源于stack exchange,提问作者V.Nouri
相关产品推荐
相关产品推荐

