如何使用Python的BeautifulSoup提取Bandcamp页面的资源链接
可通过BeautifulSoup提取Bandcamp资源链接,具体实现逻辑如下
- 核心注意点:Bandcamp的资源直链并未直接存放在静态HTML的可见DOM节点中,而是内嵌在页面的
<script>标签配置数据里,不能直接通过CSS选择器定位节点获取,需要先提取脚本内的JSON配置再解析 - 实现步骤:
- 发送请求获取目标页面的完整HTML源码,建议携带
User-Agent请求头避免被反爬拦截 - 用BeautifulSoup筛选出包含
data-tralbum配置项的脚本标签 - 用正则匹配提取配置对应的JSON字符串,做转义处理后解析为字典对象
- 从字典的
trackinfo字段中即可获取对应曲目的音频、封面等资源链接
- 发送请求获取目标页面的完整HTML源码,建议携带
- 示例代码:
import requests from bs4 import BeautifulSoup import json import re # 替换为你要爬取的Bandcamp页面地址 target_url = "替换为实际目标页地址" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 请求页面 resp = requests.get(target_url, headers=headers) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "html.parser") # 定位包含资源配置的脚本 data_script = soup.find("script", string=re.compile(r"data-tralbum")) # 提取JSON配置字符串 raw_data = re.search(r'data-tralbum="(.*?)"', str(data_script)).group(1) # 转义特殊字符后解析为字典 album_data = json.loads(raw_data.replace(""", '"')) # 遍历输出所有曲目的128Kbps音频链接 for track in album_data["trackinfo"]: if track.get("file"): print(f"曲目《{track['title']}》音频链接:{track['file']['mp3-128']}")
注意:如果Bandcamp前端页面后续迭代调整了配置字段的命名和存储位置,对应调整正则匹配规则和字段读取路径即可。
内容的提问来源于stack exchange,提问作者Yusuf Blythe
相关产品推荐
相关产品推荐

