1、导入要用到的库

#导入库
import requests
from fake_useragent import UserAgent
from lxml import etree
import re

很多初学python的同学不知道如何下载第三方库,我在这介绍一种和简单的方法
1:首先准备好下载命令

python -m pip install 想要的库的名称  --trusted-host=pypi.python.org --trusted-host=pypi.org --trusted-host=files.pythonhosted.org

把自己想要下载的库的名称替换掉命令中的"想要的库的名称",比如下载lxml第三方库的命令如下:

python -m pip install lxml  --trusted-host=pypi.python.org --trusted-host=pypi.org --trusted-host=files.pythonhosted.org

2:在Pycharm的Terminal中执行这行命令

如图所示,回车即可。

2、分析获取网址

进入网易云官网搜索"薛之谦"

得到一个网址为"https://music.163.com/#/artist?id=5781"

很明显这不是真正的请求网址,检查网页,重新搜索薛之谦在 network doc 下会有一个新的请求文件点进去看到的Request URL: https://music.163.com/artist?id=5781 就是我们想要的请求url
这时候我们可以先把这个页面的内容爬取打印出来,看一下是不是我们要的东西

url = 'https://music.163.com/artist?id=5781'
headers= {"User-Agent": UserAgent().chrome
}
result = requests.get(url, headers=headers).text
print(result)


看到这就知道确实是爬取了薛之谦第一页歌单的信息
接下来分析每一首歌的网址信息

用同样的方法检查后获取到
Request URL: https://music.163.com/song?id=1463165983
通过简单分析可以知道id就记录是那一首歌

3、删选数据

我们可以看到,爬取的歌单内容里面虽然有我们想要的数据,却也有大量不需要的内容,此时我们需要删选数据获取列表中的歌曲id,储存在一个字典中,里面每个元素为每首歌的id

dom =etree.HTML(result)
# 通过审查元素发现每首歌在<a href="/song?id=417859631"> 中通过xpath分析得获取所有歌曲id的xpath语句为'//a[contains(@href,"/song?")]/@href'
ids = dom.xpath('//ul[@class="f-hide"]//li/a/@href')
#将数据切片只需要id数值
#正则表达式
for i in range(len(ids)):ids[i] = re.sub('\D', '', ids[i])
print(ids)


此时我们就获得了这一页薛之谦歌单里的每一首歌的id值并存在了一个字典里
通过一个for循环验证我们的成果

for i in range(len(ids)):#每一首歌的地址M_url = f'https://music.163.com/song?id={ids[i]}'response = requests.get(M_url, headers=headers)html = etree.HTML(response.text)music_info = html.xpath('//title/text()')music_name = music_info[0].split('-')[0]singer = music_info[0].split('-')[1]print(music_name, singer)


可以看到我们通过每一首歌的网址爬取了每一首歌的歌名和歌手名

4、获取歌源

接下来进入最重要的环节,获取歌源,我们之前做的只是获取到每首歌的url信息但那些并不可以实现播放,我们需要通过外链来生成mp3文件
为网易云音乐的外链地址:

base_url = 'https://link.hhtjim.com/163/'

在这介绍一个可以获取各大音乐平台外链信息的网址 跳转
通过拼接每一首歌的id信息获得每一首歌的外链网址

base_url = 'https://link.hhtjim.com/163/'
for i in range(len(ids)):#每一首歌的地址M_url = f'https://music.163.com/song?id={ids[i]}'response = requests.get(M_url, headers=headers)html = etree.HTML(response.text)music_info = html.xpath('//title/text()')music_name = music_info[0].split('-')[0]singer = music_info[0].split('-')[1]print(music_name, singer)music_url = base_url + str(ids[i]) + '.mp3'print(music_url)

5、下载歌曲

在项目当前文件下建一个music文件夹来储存爬取的歌曲文件,文件格式为mp3格式 ,
wb: 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

 with open('./music/'+music_name+'.mp3', 'wb') as file:file.write(music)print("正在下载第"+str(i+1)+"首:  "+music_name+singer)



去本地对应的文件下就可以找到这些音乐啦

可以用任何音乐播放器播放。

6、总的代码

#导入库
import requests
from fake_useragent import UserAgent
from lxml import etree
import re
#网易云官网 搜索薛之谦跳转网页后  检查  network  doc 找到该网页的
#Request URL: https://music.163.com/artist?id=5781#1、确定url地址(薛之谦的歌单)
url = 'https://music.163.com/artist?id=5781'
#网易云音乐的外链地址
base_url = 'https://link.hhtjim.com/163/'
#2、请求headers= {"User-Agent": UserAgent().chrome
}
result = requests.get(url, headers=headers).text
# print(result)#3、删选数据 拿到列表中的歌曲id  为一个字典 里面有每首个的id
dom =etree.HTML(result)
# 通过审查元素发现每首歌在<a href="/song?id=417859631"> 中通过xpath分析得获取所有歌曲id的xpath语句为'//a[contains(@href,"/song?")]/@href'
ids = dom.xpath('//ul[@class="f-hide"]//li/a/@href')
#将数据切片只需要id数值
#正则表达式
for i in range(len(ids)):ids[i] = re.sub('\D', '', ids[i])
#print(ids)for i in range(len(ids)):#每一首歌的地址M_url = f'https://music.163.com/song?id={ids[i]}'response = requests.get(M_url, headers=headers)html = etree.HTML(response.text)music_info = html.xpath('//title/text()')#print(music_info)   #['我好像在哪见过你(电影《精灵王座》主题曲) - 薛之谦 - 单曲 - 网易云音乐']music_name = music_info[0].split('-')[0]singer = music_info[0].split('-')[1]#print(music_name, singer)  #我好像在哪见过你(电影《精灵王座》主题曲)   薛之谦#获取歌源music_url = base_url + str(ids[i]) + '.mp3'#print(music_url)    #打印出每首歌的外链网址music = requests.get(music_url).content#4、保存with open('./music/'+music_name+'.mp3', 'wb') as file:file.write(music)print("正在下载第"+str(i+1)+"首:  "+music_name+singer)

欢迎持续关注!
我的个人博客网站 jQueryzk Blog

python网络爬虫-爬虫实战-(爬取网易云薛之谦歌单里歌曲并下载)相关推荐

  1. selenium切换iframe框架案例——翻页爬取网易云音乐歌单作者和名称

    翻页爬取网易云音乐歌单作者和标题 案例目的: 通过翻页selenium操作网易云音乐,介绍如何切换iframe框架以及如何使用selenium定位数据所在的节点. 代码功能: 输入下载的数据页数,自动 ...

  2. 用python爬取网易云音乐歌单列表

    本文分为两个部分:基础知识和正文,其中基础知识包括什么正则表达式以及Beautifulsoup4的使用. 一.正则表达式 正则表达式用于字符串查找.合法性检查以及作为程序员的工具箱使用. 字符串查找: ...

  3. python爬取音乐歌曲大全_Python爬取网易云音乐歌单歌曲

    # 从网易云音乐下载歌单歌曲 # 参考了这些网址 # https://blog.csdn.net/Ciiiiiing/article/details/62434438 # https://github ...

  4. Python爬取网易云音乐歌单内所有歌曲

    一.目标: 下载网易云音乐热门歌单 二.用到的模块: requests,multiprocessing,re. 三.步骤: (1)页面分析:首先打开网易云音乐,选择热门歌单,可以看到以下歌单列表,然后 ...

  5. 多线程采集网易云所有歌单里歌曲url(爬虫)

    简单多线程,利用地址池创建多线程,n倍提高爬虫速度,获取音乐文件破解中 import re import time import json import datetime import threadi ...

  6. PHP爬虫音乐缓存,爬取网易云音乐热评[附上音乐下载]

    [Python] 纯文本查看 复制代码import requests import time,os from bs4 import BeautifulSoup class Music_down: de ...

  7. 骚年,还在为歌荒发愁吗?python教你爬取网易云热门歌单

    需求分析 每当歌荒时,总想找那些播放量比较高的歌单听,毕竟这么多人选择的歌单歌曲质量总会有保证. 爬取目标 本文将提取网易云音乐 播放量在1000万 以上的歌单名称,播放量和链接地址. 准备工作 保证 ...

  8. python爬取网易云音乐歌单_【python】爬取并批量下载网易云歌单,嗨翻暑假!

    [Python] 纯文本查看 复制代码# 利用 Selenium 抓取淘宝商品并用 PyQuery 解析得到商品的图片.名称.价格.购买人数. # 店铺名称.店铺所在地信息,并将其保存到MongoDB ...

  9. 利用python爬取网易云心爱歌单

    一 cookie是什么东西? 小饼干?糖果?能吃吗? 简单来说就是你第一次用账号密码访问服务器 服务器在你本机硬盘上设置一个身份识别的会员卡(cookie) 下次再去访问的时候只要亮一下你的卡片(co ...

最新文章

  1. java substring 性能_《Java程序性能优化》subString()方法的内存泄露
  2. 区块链架构下 智慧城市发展加速
  3. MapReduce基础开发之一词汇统计和排序(wordcount)
  4. Shell脚本编程----变量的使用
  5. HystrixDashbord
  6. Pandas条件筛选 | Python技能树征题
  7. resource 注解下的name爆红
  8. 深度学习(30)随机梯度下降七: 多层感知机梯度(反向传播算法)
  9. memcpy函数的实现
  10. 高通孟樸:5G+AI将会是移动互联网主流趋势
  11. Java中volatile关键字实现原理
  12. Java SSH远程执行Shell脚本实现
  13. 小型英语字典(字典训练)
  14. [渝粤教育] 西南科技大学 数据库应用 在线考试复习资料(5)
  15. 如何卸载服务(Service)?
  16. 电子科技大学计算机系王教授,王书振 | 个人信息 | 西安电子科技大学个人主页...
  17. Window10笔记本电脑如何更改默认浏览器
  18. 6种时间管理方法概要
  19. OpenHarmony 3.2 Release HDF的IDL文件初探(上)
  20. 什么是缓存系统三座大山

热门文章

  1. 是什么,夺走了我的时间?(2021年1月总结)
  2. python小作业6代码(字符串的实际应用)
  3. BlenderGIS 2.2.6导入数据NoneType 解决
  4. .NET 6 “目标进程已退出,但未引发 CoreCLR 启动事件。请确保将目标进程配置为使用 .NET Core。如果目标进程未运行 .NET Core,则发生这种情况并不意外。”
  5. 最具人气的十八种IT认证资质
  6. mshta命令用法示例(在dos命令弹出消息框)
  7. WinForm开发(74)——contextMenuStrip(3)——contextMenuStrip开发笔记
  8. “@Getter” is not applicable to field
  9. cesium环境搭建(创建三维地球)
  10. 利用GDI书写汉字的笔画顺序