ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python爬虫爬取网站音乐肯定会遇到的坑

2022-04-26 20:34:04  阅读:195  来源: 互联网

标签:python 代码 音乐 爬虫 爬取 url music id 下载


前言

大家都很喜欢听歌吧,没有人不喜欢听歌。心情好的时候要听歌,心情不好的时候也要听歌,反正歌是大家都喜欢听的。

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

对于像我这样的穷人来说,肯定是不会花几十块钱去下载几首音乐啦,而且作为程序员,充钱去下载音乐那也是不可能的,于是

我花了一天时间,上网找了各种资料来学习一下怎样才能不花钱白嫖到网站上的音乐。

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

用python爬虫时遇到的坑。

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

思路:

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

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

•删选音乐文件

•下载音乐文件

具体实现

  1. 引入发送网络请求的第三方库
import requests # 发送网络请求的第三方库
复制代码

 

安装方法

pip install requests

 

2 引入数据解析第三方库

from lxml import etree # 数据解析第三方库
复制代码

 

安装方法

pip install lxml

 

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

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

 

4 发送请求获取页面数据

response = requests.get(url=url) # 请求页面数据
复制代码

 

5 解析数据

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

 

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

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

 

7 下载歌曲

Python学习交流Q群:906715085###
base_url = 'http://music.163.com/song/media/outer/url?id=' # 下载音乐网址前缀
# 下载音乐url = 网址前缀 + 音乐id
for data in id_list:
    href = data.xpath('./@href')[0]
    music_id = href.split('=')[1] # 音乐id
    music_url = base_url + music_id # 下载音乐url
    music_name = data.xpath('./text()')[0] # 下载音乐名称
    music = requests.get(url = music_url)
    # 将下载的音乐以文件形式保存下来
    with open('./music/%s.mp3' % music_name, 'wb') as file:
         file.write(music.content)
         print('<%s>下载成功' % music_name)
复制代码

 

遇到的坑

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

件的时候突然就报错了。

首先,编辑器报错找不到 music_name 和 music_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,代码,音乐,爬虫,爬取,url,music,id,下载
来源: https://www.cnblogs.com/123456feng/p/16195035.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有