Python如何提取text/x-magento-init类型script标签中的指定JSON数据
提取Magento init脚本中JSON数据的解决方案
常见错误原因
你之前使用Bs4返回None大概率符合以下几种情况:
- 查找script标签时未指定正确的
type="text/x-magento-init"属性,Bs4默认规则只会匹配text/javascript类型的脚本 - 页面存在多个同类型Magento初始化脚本时,未做内容筛选匹配到了无关标签
- 未处理脚本内容中的HTML实体转义字符,导致后续JSON解析失败
可直接运行的实现代码
from bs4 import BeautifulSoup import json import html # 替换为你实际获取的页面源码字符串 html_content = "你的页面完整HTML源码" # 初始化Bs4解析器,没有lxml可以换成内置的html.parser soup = BeautifulSoup(html_content, 'lxml') script_tag = None # 优先直接匹配带目标特征的script标签 all_magento_scripts = soup.find_all('script', type='text/x-magento-init') for s in all_magento_scripts: raw_text = s.get_text() if '#conf-select-attr-173' in raw_text: script_tag = s break # 解析JSON内容 raw_content = script_tag.get_text(strip=True) # 处理HTML实体转义,把"这类字符转为正常引号 unescaped_content = html.unescape(raw_content) full_data = json.loads(unescaped_content) # 提取你需要的config字段 target_config = full_data['#conf-select-attr-173']['Magento_ConfigurableProduct/js/configurable/select/action']['config']
字段取值示例
解析完成后可直接从target_config字典中提取所需业务数据:
- 所有尺码选项:
target_config['attributes']['173']['options'] - 各尺码对应价格:
target_config['optionPrices'] - 各尺码库存状态:
target_config['stock'] - 各尺码对应SKU:
target_config['sku']
内容的提问来源于stack exchange,提问作者PhpCoder223
相关产品推荐
相关产品推荐

