没啥就是闲着,爬了爬盗墓笔记
import requests
import re
import os
root_url="https://www.ximalaya.com/album/8625924" #待爬取网站
folder_path=r"在这里填文件保存的地址" #注意在文件路径前一定要写上r,不然会报错
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
# 创建想把资源存往的文件夹(如果不存在)
os.makedirs(folder_path, exist_ok=True)
passcard={
"User-Agent":"这里填你的浏览器证书"
} #passcard用于伪装身份,防止网站反爬
yuan_ma=requests.get( root_url, headers=passcard ).text #text是因为获取的网页源码都是text格式
value = re.findall('"trackId":(\d+),"isPaid":false,"tag":0,"title":"(.*?)",',yuan_ma)
#用正则表达式寻找符合条件的,找到不同资源的id和名字,输出列表套元组
# 在上面的正则表达式中,只会返回trackid和title里的东西,其他只是筛选条件,不返回的
for item in value:
name=f"{item[1]}.m4a" #资源的名字
id=item[0] #资源的id
audio_url=f"https://www.ximalaya.com/revision/play/v1/audio?id={id}&ptype=1" #audio文件的地址
data=requests.get(audio_url,headers=passcard).json() #访问audio文件,应为audio文件是json格式,将服务器返回的JSON格式的数据解析为字典data
last_url=data["data"]["src"] #从audio文件(现在已经返回为data)中获取文件的真实地址
response = requests.get(last_url).content #访问真实地址,把资源写入response
# 构造保存文件的完整路径
file_name = os.path.join(folder_path, name)
#写入文件
with open(file_name, "wb") as file:
file.write(response)
print("已获取%s"%item[1])
值得注意的是,我发现喜马拉雅的资源地址不是固定的。也就是说上面代码里的网页资源地址需要重新获取。