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

如何用Beautiful Soup的soup.select()提取g_rgTopCurators中所有curator的name

提取Steam Curator名字的解决方案

嘿,我来帮你搞定这个问题!首先得明确一点:g_rgTopCurators是页面里的JavaScript变量,不是HTML元素的内容,所以没法直接用soup.select()通过CSS选择器提取它。咱们得换个思路,先把包含这个变量的脚本内容抓出来,再解析里面的数组数据。

具体步骤:

  1. 定位包含目标变量的脚本标签
    页面里的脚本标签很多,咱们要筛选出包含g_rgTopCurators的那个。可以用Beautiful Soup获取所有<script>标签,然后遍历判断内容里是否有目标变量名。

  2. 提取数组的JSON字符串
    找到对应的脚本后,用正则表达式把g_rgTopCurators = 后面的数组部分(从[到];之前的内容)提取出来。

  3. 解析JSON并提取name字段
    把提取到的字符串转换成Python字典/列表,然后遍历每个curator对象,取出name值。

完整代码示例:

import re
import json
from bs4 import BeautifulSoup

# 假设你已经初始化了soup对象,比如:
# soup = BeautifulSoup(your_html_content, 'html.parser')

# 1. 找到包含g_rgTopCurators的脚本
target_script = None
for script in soup.select('script'):
    if script.string and 'g_rgTopCurators' in script.string:
        target_script = script.string
        break

if not target_script:
    print("没找到包含g_rgTopCurators的脚本")
else:
    # 2. 用正则提取数组部分
    match = re.search(r'g_rgTopCurators\s*=\s*(.*?);', target_script, re.DOTALL)
    if match:
        curators_json_str = match.group(1)
        # 3. 解析JSON并提取name
        try:
            curators_list = json.loads(curators_json_str)
            curator_names = [curator['name'] for curator in curators_list]
            print("提取到的Curator名字:")
            for name in curator_names:
                print(name)
        except json.JSONDecodeError as e:
            print(f"解析JSON出错:{e}")
    else:
        print("没匹配到g_rgTopCurators数组")

补充说明:

  • 正则里的re.DOTALL参数是为了让.匹配换行符,因为数组内容可能跨多行。
  • 如果页面里的JS变量格式有细微变化(比如空格、换行),正则可能需要微调,但这个写法适配大多数情况。
  • 为什么不能用soup.select()?因为CSS选择器是用来定位HTML元素的,而g_rgTopCurators是JS代码里的变量,不属于DOM结构的一部分,所以直接选不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:30:21