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

如何使用Python Selenium从HTML源码中抓取内嵌JSON的ISRC数据

Selenium抓取页面内嵌JSON中ISRC字段的实现方案

问题原因

常规DOM定位方法无法拿到ISRC值的核心原因是:这个字段不是独立的HTML元素,而是直接写在页面源码内嵌的JSON数据里,属于文本内容的一部分,不存在对应的DOM节点,自然无法通过XPath、id、CSS选择器直接定位。

通用实现思路

该方法适配所有同结构的曲目详情页,不需要针对不同ISRC值做单独调整:

  • 替换代码里固定sleep()的硬等待逻辑,改用Selenium的显式等待,等目标元素加载完成再执行操作,解决等待机制不可靠的问题
  • 进入曲目详情页、页面加载完成后,直接获取整个页面的源码文本
  • 用正则表达式匹配源码中固定格式的"isrc":"编码值"结构,提取捕获到的ISRC内容即可

可直接运行的修正代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re

# 初始化浏览器
path = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(path)
# 设置显式等待最长超时时间10秒
wait = WebDriverWait(driver, 10)

driver.get("https://www.audionetwork.com/track/searchkeyword")

# 等待搜索框加载完成后输入内容
search = wait.until(EC.presence_of_element_located((By.ID, "js-keyword")))
search.send_keys("ANW3175_001_Purple-Beat.wav")
search.send_keys(Keys.RETURN)

# 等待搜索结果的曲目链接加载完成后点击
music_link = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.track__title")))
music_link.click()

# 等待详情页加载完成,获取全页源码
wait.until(EC.presence_of_element_located((By.TAG_NAME, "body")))
page_source = driver.page_source

# 正则匹配ISRC字段,兼容所有符合规范的ISRC编码
isrc_match = re.search(r'"isrc":"([A-Z0-9\-]+)"', page_source)
if isrc_match:
    isrc_code = isrc_match.group(1)
    print(f"抓取到的ISRC编号:{isrc_code}")
else:
    print("当前页面未匹配到ISRC字段")

driver.quit()

方案说明

  • 正则规则r'"isrc":"([A-Z0-9\-]+)"'会匹配所有双引号包裹的isrc键值对,捕获组只提取ISRC编码本身,不会带多余的引号和键名,不管曲目对应的ISRC是什么值都能正常匹配
  • 显式等待会在元素加载完成后立刻执行下一步,比固定等待效率更高,也不会出现页面加载慢导致的元素找不到报错
  • 如果后续需要提取更多内嵌JSON字段,也可以先定位到对应的script标签取出完整JSON字符串解析后再取值,对于单个ISRC字段来说正则匹配是最轻量通用的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:06:32