前言
最近我想在网站上下载几首音乐放到我的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(urlurl=url) # 请求页面数据
5.解析数据
- html=etree.HTML(response.text) # 解析页面数据
6.获取所有歌曲标签集合( a标签 )
- id_list = html.xpath('//a[contains(@href,"song?")]') # 所有歌曲id集合
7.下载歌曲
- 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":"网络太拥挤,请稍候再试!"}
最后,我打印出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爬虫时的一些经验,同时,我也想请教各位大神,像遇到了我这种问题了,我应该怎么办才能将这个网站的音乐文件爬到我的本地电脑里,还请各大神指点一二。
近期进展 在 ffmpeg-go init 之后,项目也收到了一些关注,还有几个同学发邮件探...
AnalyticDB for MySQL是云端托管的PB级高并发低延时数据仓库 通过AnalyticDB for...
鉴于近期加密货币大涨,导致很多小(韭)白(菜)纷纷入场,然后很多人都在问显卡挖...
文本作者:刘晓国,Elastic 公司社区布道师。新加坡国立大学硕士,西北工业大学...
场景描述 最近使用 Redis 遇到了一个类似分布式锁的场景,跟 Redis 实现分布式锁...
客户介绍 闲鱼是依托阿里电商体系的前台型业务,有非常独特的业务特点和用户诉求...
前言 语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无...
本文转载自微信公众号「见贤思编程」,作者泰斗贤若如 。转载本文请联系见贤思编...
日前 阿里云云效联合阿里云大学团队 面向全国高校学子正式启动了83行代码重构大...
云计算服务正在以前所未有的速度在各行各业快速普及,成为IT应用的最主流实现形...