Python爬虫之网易云歌单音频爬取(解决urlretrieve爬取文件不能播放问题)
网易云歌单音频爬取
写在前面:最近学习爬虫,对小说和图片都进行过简单爬取,所以打算爬取音频,但是其中遇到点问题也解决了,写下博客记录并希望对大家也有帮助。
爬取对象:对于目前主流的几个音频播放网站,我选取的是网易云(个人对其“情有独钟”),可以在浏览器上直接搜索网易云音乐的网页即可。
我们爬取的是网易云网页上的歌单里的音频,
如图,点击歌单出现的分类,我们随意选取其中一个歌单进行爬取,这里选取的链接是https://music.163.com/#/playlist?id=2829883282,但是我们也注意到这个链接中带有“#”字符,我们审查它的源代码,查看它的Network,刷新页面,点击带有id=2829883282的一段点击进入headers,我们可以发现它的真实地址
它的真实地址是https://music.163.com/playlist?id=2829883282,前者我们可以认为是个“假地址”,目的也是反爬。
获取响应:
正如之前博客提到的,既然是爬虫,就要获取网页的响应,所以我们可以编写代码:
import requests
if __name__=='__main__':header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
}#伪装爬虫response = requests.get("https://music.163.com/playlist?id=2829883282",headers = header)response.encoding = 'utf-8'html = response.textprint(html)
这里与之前的不同,设置了一个header,因为网易云有防爬(虽然目前还是可以不用),还是在之前的Network的headers中
将其加入到字典中伪装爬虫,然后还是一样的获取网页请求并打印:
之后也是同样要从这些信息中提取我们需要的内容,查看Response的选项
其中在标签为<ul class="f-hide">
一行,有我们需要的信息。这段标签里包括了歌单的每首歌的名字还有部分链接,说到这,我们也同样需要对每首歌的链接地址进行分析,其实每首歌都有对应的外链,我们通过外链来访问它对应的ID,我们点开一首歌,都会有一个生成外链播放器,目前似乎用不了,说是有版权要求,这里提供一个很有用的小工具:外链提取。或者可以记住这个前缀:http://music.163.com/song/media/outer/url,后面就可以添加标签里的部分链接就可以获取其外链。
所以我们可以编写代码:
import requests
from bs4 import BeautifulSoup
if __name__=='__main__':header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
}response = requests.get("https://music.163.com/playlist?id=2829883282",headers = header)response.encoding = 'utf-8'html = response.textbf = BeautifulSoup(html,"lxml")texts = bf.find('ul', class_="f-hide")texts = texts.find_all('a')music_name = []music_url = []server = "http://music.163.com/song/media/outer/url"for i in texts:music_name.append(i.string)url = str(server) + i.get("href")[5:] + ".mp3"music_url.append(url)print(url)
如此我们就获取了歌单里的音频的所有外链:
爬取音频:
获取完歌单音频的所有链接地址后,我们就可以爬取下载相应的音频歌曲了。音频的获取开始我是在其他博客学的,用的是urllib库中的urlretrieve方法,它可以直接将远程数据下载到本地,我们便可以在上述代码的前提下编写:
import urllib.request
num = len(music_name)
for i in range(num):urllib.request.urlretrieve(music_url[i],"%s.mp3"%music_name[i])#url和保存路径
print("下载完成")
运行之后我们在目录下可以看到音频
点击之后就可以听歌了
但是这个方法并不是时时有效,我相信很多伙伴用这个方法的时候遇到过这个问题,
其中文件的大小也不是很大,其实很大的原因是因为网易云网站的防爬设置,所以我也用了一个方式,爬取的几率更大,我们进入歌曲的外链的网页,然后同样进入Network然后获取User-Agent,然后一样的伪装爬虫,
写下如下代码:
num = len(music_name)
header1 = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
}
for i in range(num):res = requests.get(music_url[i],headers = header1)with open(str(music_name[i]) + '.mp3',"ab")as f:f.write(res.content)
print("下载完成")
运行后结果是相同的,可以选取自己需要的方法。
当然网易云中的会员曲目这里是爬取不了的(我们还是尊重会员权益),但是你如果有自己想听的歌曲,一样记住前缀,得到它的ID就可以进行爬取下载。
希望这篇博客对大家有帮助!
Python爬虫之网易云歌单音频爬取(解决urlretrieve爬取文件不能播放问题)相关推荐
- 【python爬虫】网易云歌单下载(scrapy+selenium)
我又滚回来更新了,这一次我们的目标是网易云音乐,想要通过输入歌单的链接,然后把整个歌单的歌曲都下载下来,说做就做,看看这一次有会遇见怎样的问题把. 需要注意的点: 这一次使用的框架仍然是scrapy, ...
- Python 大作业 网易云歌单数据分析及可视化(参考多位博主文章)
目录 项目概述 1.1项目来源 1.2需求描述 数据获取 2.1数据源的选取 2.2数据的获取 2.2.1 设计 2.2.2 实现 2.2.3 效果 数据预处理 3.1 设计 3.2 实现 3.3 效 ...
- 爬虫示例-网易云歌单
爬取网易云音乐的歌单. 打开歌单的url: http://music.163.com/#/discov...,然后用lxml.html提取播放数3715.结果表明,我们什么也没提取到.难道我们打开了一 ...
- python下载自己网易云歌单的歌曲
1.登录网页端网易云,复制cookie 2.输入歌单ID(就是后面的一串数字) 3.运行 网页端访问别人歌单只能看到20首歌,太难了,加上cookie还能访问自己的,还不错,虽然是标准音质 # -*- ...
- Python爬虫-selenium爬取网易云歌单
文章目录 (一)工欲善其事必先利其器-安装工具 Selenium 浏览器 (二)实战 (一)工欲善其事必先利其器-安装工具 Selenium Selenium是一个强大的网络数据采集工具,其最初是为网 ...
- 运用Python——爬取网易云歌单的全部歌曲热评_爬虫的简单应用
导航 ·运用Python--爬虫_网易云音乐热评 ·运用Python--游戏_四子棋_劳拉下棋 文章目录 导航 1.展示截图 2.代码 3.分析 常量的定义.界面设计 依次爬取歌曲信息 创建表格 爬取 ...
- Python爬虫爬取豆瓣TOP250和网易云歌单
python爬虫(网易云)笔记 @(python学习) 先推荐看一下b站的视频链接如下:https://www.bilibili.com/video/BV12E411A7ZQ?from=search& ...
- Python爬虫实战: 爬取网易云歌单
这篇文章,我们就来讲讲怎样爬取网易云歌单,并将歌单按播放量进行排序,下面先上效果图 1.用 requests 爬取网易云歌单 打开 网易云音乐 歌单首页,不难发现这是一个静态网页,而且格式很有规律,爬 ...
- 爬虫python代码网易云_爬虫实战(二) 用Python爬取网易云歌单
最近,博主喜欢上了听歌,但是又苦于找不到好音乐,于是就打算到网易云的歌单中逛逛 本着 "用技术改变生活" 的想法,于是便想着写一个爬虫爬取网易云的歌单,并按播放量自动进行排序 这篇 ...
最新文章
- 合并排序(C语言实现)
- c语言静态图片做成动态效果,如何使静态图片做成动态效果?怎么让静态图片动起来...
- springboot 打jar 包部署时 读取外部配置文件
- java floatmath_《Java1.doc
- [转]Android 项目的代码混淆,Android proguard 使用说明
- android简单的夜间模式
- 发言稿开场白范文_万能演讲开场白范文
- 新疆计算机证相关信息技术,2019新疆中小学教师计算机考试资料:信息技术课程基本理念...
- 使用 Stacer 优化 Ubuntu 系统
- Tomcat 7 下载地址
- 高等数学学习笔记——第九讲——数列收敛的判定方法
- 阿里icon使用fontclass
- XML解析——Java中XML的四种解析方式
- JavaScript基础知识学习
- Delphi之API函数
- C语言程序设计实现调制解调,C语言程序设计课件.ppt
- 能否使用他人机动车的登记证书,号牌,行驶证,检验合格标志,保险标志?
- 万字泣血解析割韭菜内情,程序员别老想着做副业
- Poj 2387 Til the Cows Come Home 迪杰斯特拉(普通+优化)
- 【Qt】.qrc文件为项目添加图片、动画、音效、视频等资源文件