You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:55:30