如何用Beautiful Soup的soup.select()提取g_rgTopCurators中所有curator的name
提取Steam Curator名字的解决方案
嘿,我来帮你搞定这个问题!首先得明确一点:g_rgTopCurators是页面里的JavaScript变量,不是HTML元素的内容,所以没法直接用soup.select()通过CSS选择器提取它。咱们得换个思路,先把包含这个变量的脚本内容抓出来,再解析里面的数组数据。
具体步骤:
定位包含目标变量的脚本标签
页面里的脚本标签很多,咱们要筛选出包含g_rgTopCurators的那个。可以用Beautiful Soup获取所有<script>标签,然后遍历判断内容里是否有目标变量名。提取数组的JSON字符串
找到对应的脚本后,用正则表达式把g_rgTopCurators =后面的数组部分(从[到];之前的内容)提取出来。解析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
相关产品推荐
相关产品推荐

