趣味学python(012)

python——爬取喜马拉雅FM

昨天,小编学习了爬取喜马拉雅的音频,特来分享(涉及到了反爬)????

涉及到的库requests os

requests:用于请求网页,获取网页数据
os: 用于创建文件夹的,进行增删改除

import requests
import os
#构造请求头,模拟浏览器访问网址

#url为请求访问的网址
url = “https://www.ximalaya.com/revision/play/album?albumId=291718&pageNum=1&sort=1&pageSize=30
response = requests.get(url, headers=header).json()
print(response)

会发现报错,如图:
在这里插入图片描述

并且,我们发现,在网页的html数据中,并未发现音乐链接,??????
在这里插入图片描述

那么音乐链接在哪呢??
这可能是遇到了反爬虫,浏览器在访问网址时,一定携带了什么特殊的东西,
User-Agent, xm-sign Referer等
要想获得数据,需要模仿浏览器,拿到数据,一个请求包括:请求的网址,请求的方法,请求头,请求体.
所以我们 即需要构造请求头,即headers

header = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome
/75.0.3770.142 Safari/537.36”,
“xm-sign”: “d53fbbbdd6634fc24b44034eeb0b5840(27)1564125374748(14)1564125374796”
}

注意,这个xm-sign即时网站用来防爬的. 需要我们动态实时获取:
在这里插入图片描述

拿到响应头数据后,下面思考下一个问题:
我们想要音乐链接的话,需要从最开始的地方,即服务器返回返回响应头(preview)开始分析.

在这里插入图片描述

需要我们定位元素,获取文件链接

audio_data = response[“data”][“tracksAudioPlay”]

for audio in audio_data:
music_src = audio[“src”]
music_name = audio[“trackName”]
# 创建音乐文件
with open(“music” + “\” + music_name + “.mp3”, “wb”) as f:
f.write(requests.get(music_src).content)

下面上完整代码:

import requests
import os
#构造请求头,模拟浏览器访问网址
header = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome
/75.0.3770.142 Safari/537.36”,
“xm-sign”: “d53fbbbdd6634fc24b44034eeb0b5840(27)1564125374748(14)1564125374796”
}
#url为请求访问的网址
url = “https://www.ximalaya.com/revision/play/album?albumId=291718&pageNum=1&sort=1&pageSize=30
response = requests.get(url, headers=header).json()
#print(response)
#创建目录 music
if not os.path.exists(“music”):
os.mkdir(“music”)
#锁定30个音乐链接
audio_data = response[“data”][“tracksAudioPlay”]
for audio in audio_data:
music_src = audio[“src”]
music_name = audio[“trackName”]
# 创建音乐文件
with open(“music” + “\” + music_name + “.mp3”, “wb”) as f:
f.write(requests.get(music_src).content)

希望对大家有帮助!! 我会继续努力爬虫的???????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值