今天我们写一个网易云音乐的爬虫,爬取网易云音乐热歌榜音乐链接并下载,这里用到了之前引用的BeautifulSoup和requests。
BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历文档树和搜索文档树中的元素,从而使得从网页中提取数据变得更加容易。BeautifulSoup还可以处理不完整的标记和编码问题,并具有广泛的解析器支持。
requests是一个Python库,用于向网站发送HTTP请求并获取响应。它提供了一种简单的方式来发送HTTP请求,包括GET、POST、PUT、DELETE等常见的请求方法。requests库还支持HTTP身份验证、Cookie、代理等功能,并具有简单易用的API接口。使用requests库可以轻松地编写Python程序来访问Web API、爬取网页数据等。
我们在工程里直接安装这两个模块:pip install bs4 requests
下面是程序源码:
import requests #请求模块 用Python模拟浏览器向服务器发起请求
from bs4 import BeautifulSoup #在html提取数据
#1.确定 获取网址
url = "https://music.163.com/discover/toplist?id=3778678"
#2.发送请求
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
res = requests.get(url=url,headers=headers)
#3.筛选数据 xpath re json bs4 pyquery
#数据预处理 获取整体界面
soup = BeautifulSoup(res.text,'html.parser')
#匹配对应的数据,音乐名称
result = soup.find('ul',class_='f-hide')
infor = result.find_all('a')
idlist = [] #存放ID
namelist = [] #存放名字
number = 0 #歌曲的序号
for i in infor:number = number+1name = i.text #音乐名字# <a href="/song?id=1917957092">爱</a>result = i.get('href')#result结果就是href后边的数据值#/song?id=1917957092id = result[9:]idlist.append(id)Newurl = 'https://music.163.com/'+resultnamelist.append(name)print(str(number)+' '+name+' '+Newurl)#4.保存数据 ()[]{}
def download():while True:a = input("请输入你要下载的歌曲的序号:")b = int(a)-1aa = idlist[b]musicName = namelist[b]url = 'http://music.163.com/song/media/outer/url?id={}.mp3'.format(aa)music = requests.get(url=url,headers=headers).contentwith open('{}.mp3'.format(musicName),'wb')as f:f.write(music)print(musicName+'下载完毕!')
download()
我们直接运行测试一下
能看到爬取的200首歌曲名称和链接,下载测试一下。比如选择200.断线
稍等片刻后下载完毕。
感兴趣的同学运行源码试一下。