Python实例---爬取下载喜马拉雅音频文件
PyCharm下python爬虫准备
打开pycharm
点击设置
点击项目解释器,再点击右边+号
搜索相关库并添加,例如:requests
喜马拉雅全网递归下载
打开谷歌/火狐浏览器,按F12打开开发者工具—>选择【网络】
编辑器浏览器输入: https://www.ximalaya.com/yinyue/ 点击【摇滚】
发现弹出新的URL:https://www.ximalaya.com/yinyue/yaogun/ [汉字转换拼音后的URL访问]
点击进入任意一个专辑[未播放]
点击播放音乐[播放中]
[是一个json格式的URL]访问搜索界面的源代码,查找albumId,通过这些albumid获取音频文件的url
https://www.ximalaya.com/revision/play/album?albumId=16372952&pageNum=1&sort=-1&pageSize=30
最后使用函数urllib.request.urlretrieve()下载音乐即可
附源码:
import re
import os
import json
import requests
import urllib
from urllib import request
from pypinyin import lazy_pinyinclass XimaLaya(object):# 模拟浏览器操作def __init__(self):self.header = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}# 第一步: 根据输入的汉字转换为拼音def han_pinyin(self, hanzi):pin = lazy_pinyin(hanzi) # 汉转拼音pin = "".join(pin) # 去除空格return pin # 返回拼音# 第二步: 根据REST格式去访问喜马拉雅,获取页面的HTMLdef getHtml(self, pinyin):url = 'https://www.ximalaya.com/yinyue/' + pinyinprint("访问的网站是: " + url)html = requests.get(url, headers=self.header)# apparent_encoding通过调用chardet.detect()来识别文本编码,有些消耗计算资源html.encoding = html.apparent_encoding# html.encoding = 'utf8' --> 直接改为UTF8也行with open('D:\XiMaLaya\html\\' + str(pinyin + '.html'), 'a', encoding='utf-8') as f:f.write(html.text)return html# 第三步:根据页面的内容获取对应歌单的albumId的值def getAlbumId(self, html):albumIdAll = re.findall(r'"albumId":(.*)', (html).text) # 利用正则进行匹配,获取专辑IDprint("专辑信息", albumIdAll)with open('D:\XiMaLaya\\albumIdAll\\' + str('albumIdAll.txt'), 'a', encoding='utf-8') as f:for x in albumIdAll:f.write(str(x))myList = []url3 = []for i in (albumIdAll[:1]):# 获取对应专辑ID的首页url2 = 'https://www.ximalaya.com/revision/play/album?albumId=' + iprint(url2)# 进入对应专辑ID的首页信息html2 = requests.get(url2.split(',')[0], headers=self.header)# 含有下载URL的集合# src "http://audio.xmcdn.com/group12/M03/2C/AA/wKgDW1WJ7GqxuItqAB8e1LXvuds895.m4a"url3 = (re.findall(r'"src":"(.*?)"', (html2).text))# 记录信息用的myList.append('获取对应专辑ID的首页\r\n' + url2 + '\n---------------------------------------')myList.append('含有下载URL的集合\r\n' + html2.text + '\n---------------------------------------')myList.append('下载专辑的URL集合\r\n' + str(url3) + '\n---------------------------------------')with open('D:\XiMaLaya\\albumIdAll\\' + str('hhh.txt'), 'a', encoding='utf-8') as f:f.write(json.dumps(myList))print('done')return url3 # 下载专辑的URL集合# 第四步: 获取专辑名def getTitle(self, html):t = re.findall(r'"title":"(.*?)"', (html).text) # 获取titile(歌名)的值with open('D:\XiMaLaya\\albumIdAll\\' + str('albumId_Name.txt'), 'a', encoding='utf-8') as f:f.write(str(t))return t# 第五步: 下载歌曲def downLoad(self, url, title):n = 0for i in url:try:urllib.request.urlretrieve(i, 'D:\XiMaLaya\\'+str(title[n]+'.m4a'))print(str(title[n]), '...【下载成功】')n = n + 1except:print(str(title[n]) + "...【下载失败】")if __name__ == '__main__':fm = XimaLaya()# 输入需要下载的歌曲类型str1 = fm.han_pinyin("摇滚")# 获取对应歌曲类型的首页信息html = fm.getHtml(str1)# 获取歌曲类型的首页里面的专辑名称title = fm.getTitle(html)# 获取歌曲类型的首页里面的专辑IDurl3 = fm.getAlbumId(html)# 下载对应曲目fm.downLoad(url3, title)
喜马拉雅单一专辑的下载
打开谷歌/火狐浏览器,按F12打开开发者工具—>选择【网络】
编辑器浏览器输入: https://www.ximalaya.com/yinyue/12521114/
点击计入音乐[未播放前]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
点击进入音乐[播放中]
[是一个json格式的URL]访问搜索界面的源代码,查找albumId,通过这些albumid获取音频文件的url
https://www.ximalaya.com/revision/play/album?albumId=12521114&pageNum=1&sort=-1&pageSize=30
最后使用函数urllib.request.urlretrieve()下载音乐即可
附源码:
import re
import json
import requests
import urllib
from urllib import requestclass XimaLaya(object):# 模拟浏览器操作def __init__(self):self.header = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}# 第一步:根据REST格式去访问喜马拉雅,获取页面的HTMLdef getHtml(self, pinyin):url = 'https://www.ximalaya.com/yinyue/' + pinyinprint("访问的网站是: " + url)html = requests.get(url, headers=self.header)# apparent_encoding通过调用chardet.detect()来识别文本编码,有些消耗计算资源html.encoding = html.apparent_encoding# html.encoding = 'utf8' --> 直接改为UTF8也行print(html)return html# 第二步:根据页面的内容获取对应歌单的albumId的值def getAlbumId(self, html):albumIdAll = re.findall(r'"albumId":(.*)', (html).text) # 利用正则进行匹配,获取专辑IDprint("专辑信息", albumIdAll)with open('D:\XiMaLaya\\albumIdAll\\' + str('albumIdAll.txt'), 'a', encoding='utf-8') as f:for x in albumIdAll:f.write(str(x))myList = []url3 = []for i in (albumIdAll[:1]):# 获取对应专辑ID的首页url2 = 'https://www.ximalaya.com/revision/play/album?albumId=' + iprint(url2)# 进入对应专辑ID的首页信息html2 = requests.get(url2.split(',')[0], headers=self.header)# 含有下载URL的集合# src "http://audio.xmcdn.com/group12/M03/2C/AA/wKgDW1WJ7GqxuItqAB8e1LXvuds895.m4a"url3 = (re.findall(r'"src":"(.*?)"', (html2).text))# 记录信息用的myList.append('获取对应专辑ID的首页\r\n' + url2 + '\n---------------------------------------')myList.append('含有下载URL的集合\r\n' + html2.text + '\n---------------------------------------')myList.append('下载专辑的URL集合\r\n' + str(url3) + '\n---------------------------------------')with open('D:\XiMaLaya\\albumIdAll\\' + str('hhh.txt'), 'a', encoding='utf-8') as f:f.write(json.dumps(myList))print('done')return url3 # 下载专辑的URL集合# 第三步: 获取专辑名def getTitle(self, html):t = re.findall(r'"title":"(.*?)"', (html).text) # 获取titile(歌名)的值with open('D:\XiMaLaya\\albumIdAll\\' + str('albumId_Name.txt'), 'a', encoding='utf-8') as f:f.write(str(t))return t# 第四步: 下载歌曲def downLoad(self, url, title):n = 0for i in url:try:urllib.request.urlretrieve(i, 'D:\XiMaLaya\\'+str(title[n]+'.m4a'))print(str(title[n]), '...【下载成功】')n = n + 1except:print(str(title[n]) + "...【下载失败】")if __name__ == '__main__':fm = XimaLaya()# 输入需要下载的歌曲URLstr1 = "yinyue/12521114/"# 获取对应歌曲类型的首页信息html = fm.getHtml(str1)# 获取歌曲类型的首页里面的专辑名称title = fm.getTitle(html)# 获取歌曲类型的首页里面的专辑IDurl3 = fm.getAlbumId(html)# 下载对应曲目fm.downLoad(url3, title)
转载于:https://www.cnblogs.com/ftl1012/p/9611334.html
Python实例---爬取下载喜马拉雅音频文件相关推荐
- python自动搜索爬取下载文件-python批量爬取下载抖音视频
本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下 import os import requests import re import sys import a ...
- 使用Python爬虫示例-自动下载网页音频文件
使用Python爬虫示例-自动下载网页音频文件 使用库 目标网站 获取并解析网页源代码 访问下载链接 使用库 requests 用来发送http请求. BeautifulSoup 一个灵活又方便的网页 ...
- python爬虫,爬取下载图片
python爬虫,爬取下载图片 分别引入以下三个包 from urllib.request import urlopen from bs4 import BeautifulSoup import re ...
- 用python 对蜻蜓fm下载的音频文件进行批量还原文件名
对蜻蜓fm下载的音频文件进行批量还原文件名 小孩爱听蜻蜓fm的故事,可是懒得老买会员(囊中羞涩).干脆就想把音频文件下载回来慢慢听. 蜻蜓fm的安卓app可以下载音频文件保存到本地电脑里,便于临时会员 ...
- Python 爬虫下载喜马拉雅音频文件
阅读文本大概需要 5 分钟 学习,是一个长期的过程.学习的方式也是有很多种的,在家里时间有空闲时间的话可以选择读书,如今在手机上看电子书也方便.pk哥最近看电子书比较多,感觉自己的视力明显下降了.停下 ...
- Python爬虫——爬取股票信息生成csv文件
最近在学习数据分析,就想着弄一份csv文件练手用,于是就爬取了股票信息,生成csv文件 爬取的网址:http://quote.eastmoney.com/ztb/detail#type=ztgc 网址 ...
- python爬取素材图片代码_基于Python爬取素材网站音频文件
基本环境配置 python 3.6 pycharm requests parsel 相关模块pip安装即可 目标网页 请求网页 import requests url = 'https://www.t ...
- python爬取收费素材_基于Python爬取素材网站音频文件
基本环境配置SUW免费资源网 python 3.6 pycharm requests parsel 相关模块pip安装即可SUW免费资源网 SUW免费资源网 目标网页SUW免费资源网 SUW免费资源网 ...
- 用python将爬取内容写入csv文件中用excel打开后的乱码问题
在平时的数据采集中我们经常会将一些数据存入csv文件,但是有时候用excel打开csv文件会发现乱码. 可能有的人会问为什么不直接将数据写去excel中,而是先写入csv然后又用excel打开,不嫌麻 ...
最新文章
- c++中的public,protected,private
- 【每日一题】502. IPO
- IDEA中Project 和 Module的区别
- 银河麒麟可执行文件双击,闪退问题
- Windows Form -----内容(2)
- 牛客练习赛43 Tachibana Kanade Loves Probability(快速幂)
- 【最新合集】IDEA 快捷键整理
- laytpl遍历实体列表_Layui数据表格之获取表格中所有的数据方法
- C++ 从文件夹中读取文件
- SkyEye:航空发动机控制系统仿真
- ssh 使用公钥登录客户端设置
- jQuery选择器整理+知识总结
- sessionStorage跨标签取值
- 2018-2019-1 20165323《信息安全系统设计基础》第一周学习总结
- LeetCode11 盛最多水的容器
- 远离魔咒,见微知著,打造崭新的罗浮宫
- 学计算机进中央电视台,央视评中科院博士论文致谢走红 从山坳穷学生到计算机博士...
- 十年磨一剑,你要的低代码平台在这里
- python当前时间减一年_python当前时间减一年_Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年......
- 初学Vue(全家桶)-第16天(vue2):插槽