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

如何通过BeautifulSoup获取HTML标签的非属性内容及解析script标签中的window.WIZ_global_data为Python字典

问题1:如何通过BeautifulSoup获取HTML标签的非属性项?

这里你说的“非属性项”应该是指标签包含的文本内容或者子节点内容吧?BeautifulSoup提供了几种实用方法来获取这些内容:

  • 获取标签内的纯文本:用.text或者.get_text()方法就行,后者更灵活,能指定子标签文本的分隔符,还能自动去除首尾空格:

    # 示例:获取<p>标签的文本内容
    paragraph = soup.find('p')
    plain_text = paragraph.text
    # 更干净的处理方式,自动去空格并合并子标签文本
    clean_text = paragraph.get_text(strip=True, separator=' ')
    
  • 获取标签内的所有子节点(含标签和文本):可以用.contents拿到子节点列表,或者用.children迭代器逐个遍历:

    # 遍历div标签的所有子节点
    div_node = soup.find('div')
    for child in div_node.children:
        print(child)
    
  • 获取标签内的完整HTML结构:如果需要保留标签格式,直接把节点转成字符串,或者用.prettify()输出格式化后的HTML:

    # 获取标签内的完整HTML代码
    inner_html = str(div_node)
    # 格式化后的美观版本
    formatted_html = div_node.prettify()
    

问题2:解析script标签中的window.WIZ_global_data为字典

先明确一点:window.WIZ_global_data不是script标签的属性,它是script标签内部定义的JavaScript全局变量,属于标签的文本内容部分。

要把它转成Python字典访问,用字符串处理+JSON解析就能搞定,非常Pythonic:

步骤1:获取script标签的文本内容

你已经知道用soup.head.script.text获取,这一步没问题:

script_text = soup.head.script.text

步骤2:提取字典格式的字符串

我们需要去掉开头的window.WIZ_global_data = 和末尾的;,这里推荐用正则表达式,比字符串分割更可靠,能避免文本中其他干扰内容:

import re
# 匹配window.WIZ_global_data后面的字典内容,支持换行
match = re.search(r'window\.WIZ_global_data = ({.*?});', script_text, re.DOTALL)
if match:
    data_str = match.group(1)

re.DOTALL参数让.能匹配换行符,确保即使字典内容换行也能完整捕获。

步骤3:转为Python字典

这个JavaScript对象的格式完全符合JSON规范(键值都用双引号),直接用json.loads()转换即可:

import json
wiz_data = json.loads(data_str)

步骤4:像普通字典一样访问

现在你就可以随意操作里面的内容了:

# 示例:获取FdrFJe对应的值
print(wiz_data['FdrFJe'])
# 访问嵌套的nQyAE字典
print(wiz_data['nQyAE']['WBBR0d'])

如果遇到JavaScript对象里有单引号等不符合JSON的情况,可能需要先做替换,但你提供的例子格式很标准,上面的代码直接就能正常工作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:22:28