首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用python爬虫爬取网站音乐遇到的坑

前言

最近我想在网站上下载几首音乐放到我的u盘里听,但是上网上一找,各大音乐网站下载歌曲(尤其是好听的歌曲)都需要vip。

对于像我这样的穷人来说,肯定是不会花几十块钱去下载几首音乐啦,而且作为程序员,充钱去下载音乐那也是不可能的,于是我花了一天时间,上网找了各种资料来学习一下怎样才能不花钱白嫖到网站上的音乐。

当然,方法还是有很多种的,最后我还是选择了一种最简单,最方便的一种方法:python爬虫。下面,我就跟大家分享一下我在用python爬虫时遇到的坑。

下面,我以爬取某易云音乐为例,介绍一下我时如何学习python爬虫的:思路:

音乐从哪里来?---网站的服务器里

怎么从网址里得到音乐?---向网站发起网络请求

删选音乐文件

下载音乐文件

具体实现

1. 引入发送网络请求的第三方库

importrequests# 发送网络请求的第三方库

复制代码

安装方法

pipinstall requests

引入数据解析第三方库

fromlxmlimportetree# 数据解析第三方库

复制代码

安装方法

pipinstall lxml

某易云音乐网站列表url为'https://music.163.com/#/discover/toplist?id=3778678'

url='https://music.163.com/#/discover/toplist?id=3778678'

复制代码

发送请求获取页面数据

response= requests.get(url=url)# 请求页面数据

复制代码

解析数据

html=etree.HTML(response.text)# 解析页面数据

复制代码

获取所有歌曲标签集合(a标签

id_list= html.xpath('//a[contains(@href,"song?")]')# 所有歌曲id集合

复制代码

下载歌曲

base_url ='http://music.163.com/song/media/outer/url?id='# 下载音乐网址前缀

# 下载音乐url = 网址前缀 + 音乐id

fordatainid_list:

href = data.xpath('./@href')[]

music_id = href.split('=')[1]# 音乐id

music_url = base_url + music_id# 下载音乐url

music_name = data.xpath('./text()')[]# 下载音乐名称

music = requests.get(url = music_url)

# 将下载的音乐以文件形式保存下来

withopen('./music/%s.mp3'% music_name,'wb')asfile:

file.write(music.content)

print('下载成功'% music_name)

复制代码

遇到的坑

以上的方法我是从一个视频里学到的,那个视频是半年前出的,可能当时这种方法还好使,但是今天我在用这种方法下载音乐文件的时候突然就报错了。

首先,编辑器报错找不到music_namemusic_id,我仔细一看,获取的id_list集合里(也就是标签集合里)的id根本不是id,是代码,估计在这里音乐网站也做了相应的反扒机制。

其次,我自己在网站里找到了一首音乐获取了它的id并把id赋值给music_id,结果当用外链下载音乐时报错460,显示网络拥挤,估计下载音乐的网址也不好使了。

base_url = 'http://music.163.com/song/media/outer/url?id='

music_id = '1804320463.mp3'

music_url = base_url + music_id

music = requests.get(url=music_url)

print(music.text)

复制代码

{"msg":"网络太拥挤,请稍候再试!","code":-460,"message":"网络太拥挤,请稍候再试!"}e

最后,我打印出music_url,点击进去,还是可以听歌和下载的,不知道这是为什么了

base_url = 'http://music.163.com/song/media/outer/url?id='

music_id = '1804320463.mp3'

music_url = base_url + music_id

# music = requests.get(url=music_url)

print(music_url)

复制代码

music.163.com/song/media/…

总结

现在的网站技术更新太快,很多网站都有了高级反爬机制,毕竟嘛,有些东西还是不能随随便便就给你的,我写这篇文章主要是跟大家分享一下我学习python爬虫时的一些经验,同时,我也想请教各位大神,像遇到了我这种问题了,我应该怎么办才能将这个网站的音乐文件爬到我的本地电脑里,还请各大神指点一二。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210302A0DD9600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券