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

如何使用BeautifulSoup提取window.initialState中的title与longURL字段

Python爬虫提取window.initialState并转JSON的解决方案

匹配失败的核心原因

  • 正则中.默认不匹配换行符,若window.initialState的赋值内容跨行会导致匹配不全
  • 未移除匹配结果中的window.initialState = 前缀,不符合JSON格式要求
  • 示例中可见的多余括号、尾部分号、引号等干扰字符未清理,也会导致JSON解析失败

完整实现代码

import re
import json
import requests
from bs4 import BeautifulSoup as bsoup

# 目标地址
url = "替换为你的抓取网址"
# 加UA头避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

page = requests.get(url, headers=headers)
soup = bsoup(page.text, 'html.parser')

# 筛选包含window.initialState的script标签
target_script = ""
for script in soup.find_all('script'):
    if script.string and "window.initialState" in script.string:
        target_script = script.string
        break

if target_script:
    # 正则加re.DOTALL标记让.匹配换行,捕获JSON本体
    match_result = re.search(r'window\.initialState\s*=\s*({.*?});?', target_script, re.DOTALL)
    if match_result:
        # 提取JSON字符串并清理干扰字符
        raw_json = match_result.group(1).strip().strip("('").strip("')")
        try:
            data = json.loads(raw_json)
            # 读取目标字段
            title = data.get("title")
            long_url = data.get("longURL")
            print(f"Title: {title}, longURL: {long_url}")
        except json.JSONDecodeError as e:
            print(f"JSON解析出错:{e}")
            # 出错时打印raw_json排查特殊字符、转义问题
            # print(raw_json)

注意事项

  • 若页面为重度JS动态渲染,requests无法获取到完整源码时,可替换为selenium、playwright等浏览器自动化工具加载页面后再提取源码
  • 若仍出现JSON解析失败,可打印raw_json检查是否存在未转义的特殊字符、单引号包裹等问题,针对性做字符串替换清理即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:00