python程序20:写一个音乐爬虫

今天我们写一个网易云音乐的爬虫,爬取网易云音乐热歌榜音乐链接并下载,这里用到了之前引用的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+1
    name = i.text #音乐名字
    # <a href="/song?id=1917957092">爱</a>
    result = i.get('href')
    #result结果就是href后边的数据值
    #/song?id=1917957092
    id = result[9:]
    idlist.append(id)
    Newurl = 'https://music.163.com/'+result
    namelist.append(name)
    print(str(number)+' '+name+' '+Newurl)



#4.保存数据 ()[]{}
def download():
    while True:
        a = input("请输入你要下载的歌曲的序号:")
        b = int(a)-1
        aa = 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).content

        with open('{}.mp3'.format(musicName),'wb')as f:
            f.write(music)
            print(musicName+'下载完毕!')

download()

我们直接运行测试一下

能看到爬取的200首歌曲名称和链接,下载测试一下。比如选择200.断线

稍等片刻后下载完毕。

感兴趣的同学运行源码试一下。

发表评论

zh_CNChinese