如何用Playwright Python将网页内容保存为JSON?
用Playwright Python提取页面内容并保存为JSON
这里给你两种方案,分别对应提取指定元素和保存整个页面的需求,基于你现有的代码框架修改:
方案一:提取指定<div id="request-data" class="col-lg-12">的内容并保存为JSON
根据目标div的内容结构,分两种处理方式:
1. 解析结构化HTML内容
如果div里是嵌套的HTML元素(比如表格、列表),结合BeautifulSoup将其转成结构化字典后存为JSON:
from playwright.sync_api import sync_playwright from bs4 import BeautifulSoup import json with sync_playwright() as p: browser = p.chromium.launch(headless=False, slow_mo=500) page = browser.new_page() page.goto("你的目标页面URL") # 替换为实际地址 # 等待目标元素加载完成,避免数据缺失 page.wait_for_selector('div#request-data.col-lg-12') # 获取目标div的完整HTML target_html = page.inner_html('div#request-data.col-lg-12') # 解析HTML为结构化数据(示例逻辑,可根据实际HTML调整) soup = BeautifulSoup(target_html, 'html.parser') parsed_data = {} # 提取div下所有子元素的标签、文本和属性 for idx, element in enumerate(soup.find_all()): parsed_data[f"item_{idx}"] = { "tag": element.name, "text": element.get_text(strip=True), "attrs": dict(element.attrs) } # 保存到JSON文件 with open('request_data.json', 'w', encoding='utf-8') as f: json.dump(parsed_data, f, ensure_ascii=False, indent=2) browser.close()
2. 直接提取JSON格式文本
如果目标div里本身就是后端渲染的JSON字符串,直接提取文本后转成JSON:
# 替换上述代码中的解析部分 target_text = page.inner_text('div#request-data.col-lg-12') try: parsed_data = json.loads(target_text) except json.JSONDecodeError: # 非纯JSON时 fallback 保存文本内容 parsed_data = {"content": target_text} # 保存到文件(同上)
方案二:保存整个页面内容为JSON
如果需要保存完整页面,有两种常见方式:
from playwright.sync_api import sync_playwright import json with sync_playwright() as p: browser = p.chromium.launch(headless=False, slow_mo=500) page = browser.new_page() page.goto("你的目标页面URL") # 等待页面完全加载(网络请求全部完成) page.wait_for_load_state('networkidle') # 方式1:保存整个页面的HTML到JSON full_html = page.content() page_data = {"full_page_html": full_html} # 方式2:保存页面所有可见文本 # full_text = page.locator('body').inner_text() # page_data = {"full_page_text": full_text} # 保存文件 with open('full_page_data.json', 'w', encoding='utf-8') as f: json.dump(page_data, f, ensure_ascii=False, indent=2) browser.close()
关键注意事项
- 必须添加等待逻辑:用
page.wait_for_selector()等待指定元素,或page.wait_for_load_state()等待页面加载完成,避免页面未渲染就提取内容。 - 动态加载页面:如果数据是AJAX请求返回或滚动加载的,需要额外用
page.wait_for_response()等待接口,或模拟滚动后再提取。 - 中文编码:保存JSON时指定
encoding='utf-8'和ensure_ascii=False,防止中文乱码。
内容的提问来源于stack exchange,提问作者msb
相关产品推荐
相关产品推荐

