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

如何用Beautiful Soup提取HTML中JSON脚本的指定字段?

提取Next.js页面title字段的正确方法

你之前用soup.find('a-toaster Toaster_toaster__bTabZ')报错是因为找错了目标元素——这个元素和你要的title数据完全无关,而且这种写法本身也不符合BeautifulSoup的选择器规则(标签加类名需要分开指定)。正确的做法是直接定位页面里的__NEXT_DATA__脚本标签,你要的title就藏在这个标签的JSON数据里。

具体步骤和代码示例:

  1. 定位目标script标签
    用标签名+id属性精准查找,这是最可靠的方式:
script_tag = soup.find('script', id='__NEXT_DATA__')
  1. 解析JSON数据
    把script标签里的文本内容解析成Python字典:
import json
if script_tag:
    next_data = json.loads(script_tag.string)
else:
    # 处理找不到标签的情况,比如页面结构变化
    next_data = {}
  1. 提取title字段
    按照JSON层级逐层取值,建议用get方法避免层级不存在时抛出KeyError:
title = next_data.get('props', {}).get('pageProps', {}).get('metadata', {}).get('title', None)
  1. 存入DataFrame
    用pandas创建DataFrame,customer列填充null:
import pandas as pd
df = pd.DataFrame({
    'title': [title],
    'customer': [None]
})

完整示例代码:

from bs4 import BeautifulSoup
import json
import pandas as pd

# 假设你的HTML内容存在html_content变量里
soup = BeautifulSoup(html_content, 'html.parser')

# 定位并解析__NEXT_DATA__
script_tag = soup.find('script', id='__NEXT_DATA__')
if script_tag:
    next_data = json.loads(script_tag.string)
    title = next_data.get('props', {}).get('pageProps', {}).get('metadata', {}).get('title', None)
else:
    title = None

# 创建DataFrame
df = pd.DataFrame({
    'title': [title],
    'customer': [None]
})

print(df)

如果遇到某个层级缺失的情况,上面的get方法会返回None,不会导致程序崩溃,你可以根据需求调整默认值。

内容的提问来源于stack exchange,提问作者brenda89

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:10:35