歌曲网站
- 目前的音乐网站不容易下载音乐,加了很多奇奇怪怪的限制<晚上八点到十点高峰期不提供音乐下载服务>,通过爬虫可以突破这一限制。
- 目标网站 http://www.htqyy.com/top/hot 我们的目标是通过爬虫爬取好听轻音乐网的前三页音乐资源。
分析好听轻音乐网页
- 首先是获取前三页网址。通过网页F12开发者工具,单击network,刷新页面获取url信息。
- 第一页url:http://www.htqyy.com/top/musicList/hot?pageIndex=0&pageSize=20
- 第二页url:http://www.htqyy.com/top/musicList/hot?pageIndex=1&pageSize=20
- 第三页url:http://www.htqyy.com/top/musicList/hot?pageIndex=2&pageSize=20
-
分析结果:pageIndex=0,1,2的序列排列那么在请求中用循环的方式爬取页面。
- 获取歌曲的链接信息和歌曲名称复制粘贴出来便于构造正则表达式提取页面元素。
-
<a href="/play/59" target="play" title="阿兰胡埃斯之爱" sid="59">阿兰胡埃斯之爱</a>
- 分析具体歌曲信息的html,这一步不太好找,而且歌曲地址经常会发生变化。建议多选择几个歌曲的链接,一般3到5个可以找到。
- 歌曲网页其中一个地址http://f2.htqyy.com/play7/20/mp3/5
爬取步骤
- 通过分析出的3页网址信息构造url用循环的方式获取网页内容。
- 通过正则表达式解析出歌曲名和歌曲的id,歌曲名用于最后写入本地时给歌曲取名,歌曲id用于构造单个歌曲所在的具体地址。
-
构造第二层具体歌曲的url并用requests模块进行爬取,并将获取的内容写入本地。
具体代码:
import requests
import time
import re
#目标网址http://www.htqyy.com/top/hot的音乐资源爬取3页
#分析网页:
#第一页url:http://www.htqyy.com/top/musicList/hot?pageIndex=0&pageSize=20
#第二页url:http://www.htqyy.com/top/musicList/hot?pageIndex=1&pageSize=20
#第三页url:http://www.htqyy.com/top/musicList/hot?pageIndex=2&pageSize=20
#分析结果:pageIndex0,1,2的序列排列那么在请求中用循环的方式爬取页面
#想要爬取的音乐链接
#<a href="/play/59" target="play" title="阿兰胡埃斯之爱" sid="59">阿兰胡埃斯之爱</a>
#歌曲网页地址http://f2.htqyy.com/play7/20/mp3/5
songid=[]
songname=[]
for i in range(0,3):
url="http://www.htqyy.com/top/musicList/hot?pageIndex="+str(i)+"0&pageSize=20"
res=requests.get(url)
strr=res.text
pat1=r'title="(.*?)" sid'
pat2=r'sid="(.*?)"'
titlelist=re.findall(pat1,strr)
idlist=re.findall(pat2,strr)
#print(titlelist,idlist)
songid.extend(idlist)#通过列表组合将3页的id组合成新的列表
songname.extend(titlelist)#通过列表组合将3页的歌曲名组合成新的列表
#通过二次爬取将歌曲的下载到本地
for i in range(0,len(songid)):
musicurl="http://f2.htqyy.com/play7/"+str(songid[i])+"/mp3/5"
musicname=songname[i]
musicres=requests.get(musicurl).content
print("正在下载第", i + 1, "首.............")
with open("E:\\music\\{}.mp3".format(musicname),"wb") as f:
f.write(musicres)
time.sleep(0.5)