当前位置: 首页 > 科技观察

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

时间:2023-03-14 21:17:34 科技观察

使用Python爬虫爬取网站音乐歌曲遇到的坑)都需要vip。像我这种穷人,花几十块钱下载几首音乐肯定是不行的,而作为程序员,下载音乐也不可能收费,所以我在网上找了一天。我收集了各种资料,学习如何不花钱在网站上卖淫音乐。当然方法还是有很多的,最后我选择了最简单方便的方法:python爬虫。接下来和大家分享一下我在使用python爬虫的时候遇到的坑。下面我以爬取某易云音乐为例,介绍一下我是如何学习python爬虫的:思路:音乐从哪里来?---如何从网站服务器中的URL获取音乐?---向网站发起网络请求删除和选择音乐文件下载音乐文件具体实现1.引入发送网络请求的第三方库importrequests#发送网络请求的第三方库安装方法pipinstallrequests2。从lxmlimportetree引入一个数据分析第三方库#数据分析第三方库安装方法pipinstallllxml3。某易云音乐网站列表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前缀#下载音乐url=URL前缀+音乐idfordatainid_list:href=data.xpath('./@href')[0]music_id=href.split('=')[1]#音乐idmusic_url=base_url+music_id#下载音乐urlmusic_name=data.xpath('./text()')[0]#下载音乐名称music=requests.get(url=music_url)#将下载的音乐保存为文件withopen('./music/%s.mp3'%music_name,'wb')asfile:file.write(music.content)print('<%s>下载成功'%music_name)遇到上面的坑方法我从一个视频里学的是的,那个视频是半年前发布的。可能当时这个方法还行,今天用这个方法下载音乐文件突然报错。首先小编报错找不到music_name和music_id。我仔细一看,得到的id_list集合(也就是label集合)里面的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_idmusic=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爬虫的一些心得。同时也想向大家请教一下。好像遇到过这种问题,请问如何将本网站的音乐文件爬取到我的本地电脑,请指教。