爬虫基础系列requests实战——爬取音乐资源(5)

timg.jpg

歌曲网站

  • 目前的音乐网站不容易下载音乐,加了很多奇奇怪怪的限制<晚上八点到十点高峰期不提供音乐下载服务>,通过爬虫可以突破这一限制。
  • 目标网站 http://www.htqyy.com/top/hot 我们的目标是通过爬虫爬取好听轻音乐网的前三页音乐资源。
    image.png

分析好听轻音乐网页

爬取步骤

  1. 通过分析出的3页网址信息构造url用循环的方式获取网页内容。
  2. 通过正则表达式解析出歌曲名和歌曲的id,歌曲名用于最后写入本地时给歌曲取名,歌曲id用于构造单个歌曲所在的具体地址。
  3. 构造第二层具体歌曲的url并用requests模块进行爬取,并将获取的内容写入本地。


    image.png

    具体代码:

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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容