没啥就是闲着,爬了爬盗墓笔记

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])

值得注意的是,我发现喜马拉雅的资源地址不是固定的。也就是说上面代码里的网页资源地址需要重新获取。 

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。