如何用Beautiful Soup提取script标签中的markers数组?
提取script标签中的markers数组方法
你已经定位到目标script标签了,接下来按以下步骤就能提取出markers数组:
步骤1:获取script标签的文本内容
你当前拿到的txt是BeautifulSoup的Tag对象,得先提取里面的纯文本内容:
script_content = txt.string # 也可以用 txt.text
步骤2:用正则提取可解析的配置结构
这段内容是jQuery扩展Drupal.settings的代码,我们需要把大括号里的配置对象单独提取出来。另外注意你提供的内容里"ajaxPageState, "是不完整的键值对,得先修正才能正常解析:
import re import json # 匹配配置对象的正则 pattern = re.compile(r'jQuery\.extend\(Drupal\.settings,\s*({.*?})\s*\)') match = pattern.search(script_content) if match: settings_str = match.group(1) # 修复语法错误:把不完整的片段补成合法键值对 settings_str = settings_str.replace('"ajaxPageState, ', '"ajaxPageState":{}, ') # 转成JSON对象 settings = json.loads(settings_str) # 提取markers数组 markers = settings.get('markers', []) print(markers)
更鲁棒的优化方案
如果不确定目标script标签的索引(比如你用的scripts[22]),可以遍历所有script标签,自动定位包含markers的标签:
for script in soup.find_all('script'): if script.string and 'markers' in script.string: # 在这里执行上面的提取逻辑 break
内容的提问来源于stack exchange,提问作者ninsonTan
相关产品推荐
相关产品推荐

