python soup歌词_【python】 爬取网易云音乐 专辑图片+歌词
要求
下载一百首歌曲,相关图片以及相关文字信息
存储方式分别为:
.mp3
.txt
.png
比如第一首歌曲相关信息为001.mp3\001.txt\001.png
觉得像是小朋友的抄写作业有没有……
想试试看爬-虽然我也不知道行不行
思路
一开始的想法是全都直接根据歌单获取歌曲的ID,然后每首歌都按那个格式001.mp3\001.txt\001.png存下来
后来发现我好像做不到直接下mp3……因为在网页版一点会跳出来请在PC版下载(咦所以结果我也不知道怎么操作……)
然后计划就变成了 - 爬图片+歌词,命名成和音乐同个格式,然后按名字排序之后就可以用改名软件批量直接改成这个样子了(自以为很机智)
虽然本人对python的理解还停留在曾经因作业要求爬过一次的莎士比亚全集……
准备
软件
如果你和我一样智障的话你可能需要如下资料
然后不一定都有用……因为我是一直在改别人的代码……
exprcted an indented block - 调整缩进
具体操作
美汤(程序员都是吃货系列
先对着一个歌单把ID爬下来
然后再对着ID爬各种……(只能想到这样了)
具体实现
应该可以从如下代码中看到以上一些参考文献的痕迹(捂脸)
虽然拼凑痕迹有点明显orz反正能大概实现功能已经很满意了
读取歌单
# 爬取某歌单的所有歌曲ID
def getSongIdList():
songIdList = []
playListUrl = 'http://music.163.com/playlist?id=918802417'#空城 finished
soup = BeautifulSoup(_session.get(playListUrl).content)
ul = soup.find('ul', attrs={'class': 'f-hide'})
for li in ul.findAll('li'):
songId = (li.find('a'))['href'].split('=')[1]
print songId
songIdList.append(songId)
# 去一下重复的歌曲I
songIdList = list(set(songIdList))
return songIdList
歌曲名+歌手名
url = BASE_URL + 'song?id=' + str(song.id)
url.decode('utf-8')
soup = BeautifulSoup(_session.get(url).content)
strArr = soup.title.string.split(' - ')
song.singer = strArr[1]
name = strArr[0].encode('utf-8')
歌词
def get_lyric_by_music_id(music_id,songstr):#定义一个函数,通过音乐的id得到歌词
lrc_url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(music_id) + '&lv=1&kv=1&tv=-1'
#lrc_url = BASE_URL + 'song?id=' + str(music_id)
lyric=requests.get(lrc_url)
json_obj=lyric.text
#print(json_obj)
j=json.loads(json_obj)
file_atr = 'E:\\music\\' + songstr + '.txt'
f = open(file_atr,'wb')
f.writelines(songstr.encode('utf8'))
f.write('\n')
try:#部分歌曲没有歌词,这里引入一个异常
lrc=j['lrc']['lyric']
pat=re.compile(r'\[.*\]')
lrc=re.sub(pat,"",lrc)
lrc=lrc.strip()
#print type(lrc)
f.writelines(lrc.encode('utf8'))
f.close()
return lrc
except KeyError as e:
f.writelines('No Available Lyric on CloudMusic')
f.close()
专辑封面
def get_img(url,songstr): ##保存图片
#print '##正在读取图片##'
#print url
urlStream=urllib.urlopen(url)
htmlString=urlStream.read()
#print htmlString
if( len(htmlString)!=0 ):
patternString=r'http://p1.music.126.net/.*?.jpg'
searchPattern=re.compile(patternString)
imgUrlList=searchPattern.findall(htmlString)
imgUrl =imgUrlList[0]
#print imgUrl
if( len(imgUrl)!= 0 ):
urllib.urlretrieve(imgUrl,'E:\\music\\' + songstr + '.jpg')
完整代码
# encoding=utf8
import requests
from selenium import webdriver
from bs4 import BeautifulSoup
import os, json
import base64
import warnings
import re,urllib,uuid
warnings.filterwarnings("ignore")
BASE_URL = 'http://music.163.com/'
_session = requests.session()
localPath='d://pythonPath'
def createFileWithFileName(localPathParam,fileName):
totalPath=localPathParam+'//'+fileName
if not os.path.exists(totalPath):
file=open(totalPath,'a+')
file.close()
class Song(object):
def __lt__(self, other):
return self.commentCount > other.commentCount
# 爬取某歌单的所有歌曲ID
def getSongIdList():
songIdList = []
playListUrl = 'http://music.163.com/playlist?id=918802417'#空城 finished
soup = BeautifulSoup(_session.get(playListUrl).content)
ul = soup.find('ul', attrs={'class': 'f-hide'})
for li in ul.findAll('li'):
songId = (li.find('a'))['href'].split('=')[1]
print songId
songIdList.append(songId)
# 去一下重复的歌曲I
songIdList = list(set(songIdList))
return songIdList
# 获取歌曲信息
def matchSong(songId):
song = Song()
song.id = songId
return song
def get_lyric_by_music_id(music_id,songstr):#定义一个函数,通过音乐的id得到歌词
lrc_url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(music_id) + '&lv=1&kv=1&tv=-1'
#lrc_url = BASE_URL + 'song?id=' + str(music_id)
lyric=requests.get(lrc_url)
json_obj=lyric.text
#print(json_obj)
j=json.loads(json_obj)
file_atr = 'E:\\music\\' + songstr + '.txt'
f = open(file_atr,'wb')
f.writelines(songstr.encode('utf8'))
f.write('\n')
try:#部分歌曲没有歌词,这里引入一个异常
lrc=j['lrc']['lyric']
pat=re.compile(r'\[.*\]')
lrc=re.sub(pat,"",lrc)
lrc=lrc.strip()
#print type(lrc)
f.writelines(lrc.encode('utf8'))
f.close()
return lrc
except KeyError as e:
f.writelines('No Available Lyric on CloudMusic')
f.close()
def get_img(url,songstr): ##保存图片
#print '##正在读取图片##'
#print url
urlStream=urllib.urlopen(url)
htmlString=urlStream.read()
#print htmlString
if( len(htmlString)!=0 ):
patternString=r'http://p1.music.126.net/.*?.jpg'
searchPattern=re.compile(patternString)
imgUrlList=searchPattern.findall(htmlString)
imgUrl =imgUrlList[0]
#print imgUrl
if( len(imgUrl)!= 0 ):
urllib.urlretrieve(imgUrl,'E:\\music\\' + songstr + '.jpg')
# 设置歌曲的信息
def setSongInfo(song):
url = BASE_URL + 'song?id=' + str(song.id)
url.decode('utf-8')
soup = BeautifulSoup(_session.get(url).content)
strArr = soup.title.string.split(' - ')
song.singer = strArr[1]
name = strArr[0].encode('utf-8')
song.name = name
songstr = strArr[0]+ ' - '+ strArr[1]
songstr = songstr.replace('/',' ')
song.lrc = get_lyric_by_music_id(song.id,songstr)
song.img = get_img(url,songstr)
# 获取符合条件的歌曲列表
def getSongList():
print ' ##正在爬取歌曲编号... ##'
songIdList = getSongIdList()
print ' ##爬取歌曲编号完成,共计爬取到' + str(len(songIdList)) + '首##'
songList=[]
for id in songIdList[0:]:
song = matchSong(id)
if None != song:
setSongInfo(song)
songList.append(song)
print '成功匹配一首{名称:', song.name, ' - ', song.singer, '}'
# print ' ##爬取完成,符合条件的的共计' + str(len(songList)) + '首##'
return songList
def main():
songList = getSongList()
if __name__ == '__main__':
main()
过程截图
运行过程
结果
(这里我很怂的把歌手名去掉了因为斜杠的问题解决不掉)
迷之操作
格式工厂转图片格式 + 拖把更名器改名……
我想知道这个失败是什么鬼……
看起来是按顺序操作的……朕心甚慰……
最后还是有一部分是手动调的因为改名软件对于一些特殊字符会出bug……
其他问题
python里的字符格式还是不太懂
然后存文件的时候格式是'歌曲名 - 歌手名.txt'或者jpg,要是歌手名有\分隔会出问题……
反正就是还有一些问题orz
17.10.7
对于斜杠的处理是 替换成空格= =然后还有一些特殊的组合会出问题
python soup歌词_【python】 爬取网易云音乐 专辑图片+歌词相关推荐
- 【python】 爬取网易云音乐 专辑图片+歌词
要求 下载一百首歌曲,相关图片以及相关文字信息 存储方式分别为: .mp3 .txt .png 比如第一首歌曲相关信息为001.mp3\001.txt\001.png 觉得像是小朋友的抄写作业有没有- ...
- python爬取网易云音乐 专辑图片+歌词
思路 一开始的想法是全都直接根据歌单获取歌曲的ID,然后每首歌都按那个格式001.mp3\001.txt\001.png存下来 后来发现我好像做不到直接下mp3--因为在网页版一点会跳出来请在PC版下 ...
- python爬音乐-用python爬取网易云音乐歌曲的歌词
今天我来分享一下如何用python爬取网易云音乐歌曲的歌词,网易云音乐的歌词的爬取思路同前面介绍过的爬取网易云音乐的歌曲评论的爬取思路一致.由于两者的加密思路都是一致的,因此我们只需分析出被加密了的参 ...
- 【python爬虫自学笔记】-----爬取网易云歌单中歌曲歌词
工具:python3.6 ,pycharm 个人歌单的链接地址为https://music.163.com/#/playlist?id=2251736705 开始对网页的内容进行爬取的时候,使用req ...
- 【python】爬虫入门:爬取网易云音乐的歌曲评论、用户歌单、用户听歌记录等
目录 一.概述 二.爬取流程 1.爬取评论 1.1.资源定位 1.2.爬取准备 1.3.代码实现 2.爬取听歌记录 2.1.资源定位 2.2.爬取准备 2.3.js劫持 三.总结 一.概述 第一次学爬 ...
- python爬虫爬取音乐_利用python爬虫实现爬取网易云音乐热歌榜
利用python爬虫实现爬取网易云音乐热歌榜 发布时间:2020-11-09 16:12:28 来源:亿速云 阅读:102 作者:Leah 本篇文章给大家分享的是有关利用python爬虫实现爬取网易云 ...
- python网易云_用python爬虫爬取网易云音乐
标签: 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去.按键盘F12打开网页调试工具,点击Ne ...
- python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名
目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...
- python爬虫网易云音乐评论再分析_爬取网易云音乐的评论后,竟有这种发现!
原标题:爬取网易云音乐的评论后,竟有这种发现! 作者 | 志颖 责编 | 胡巍巍 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条. 现在 ...
最新文章
- python爬虫小说代码示例-中文编程,用python编写小说网站爬虫
- java synchronized wait
- android启动activity的详细过程
- MySql join on 和 where
- easyui datagrid加载本地数据和网络数据
- ACCESS常用数字类型的说明和取值范围
- python计算机二级考试大题总结
- CSS calc()函数的用法
- 知识图谱学习笔记(三)——知识表示方法
- win10复制粘贴不能用解决方法汇总
- TYPHOON cms漏洞 简书(ssh篇)
- iphonex蓝牙打不开转圈_iphonex蓝牙一直在转圈
- 那些惊艳的算法—时间轮任务调度(sunwind整理)
- 屏读时代,我们患上了注意力缺失候群症
- 系统可用性量表(SUS )
- 微信多开_电脑PC端微信双开多开
- Excel怎么把横排变竖排,一键转换表格格式
- C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
- 10Mbps是多少网速呢
- Eversipn STT-MRAM的MJT细胞
热门文章
- Echarts中国地图修改
- 74ls161中rco是什么_数字电子技术常用时序逻辑功能器件国家精品课程.ppt
- 教师教学公开课创意黑板学习PPT模板
- 会议Oral的线上视频的录制
- MSYS2显著简化Kafka在windows C++下的使用门槛
- 关于go语言下载“https://proxy.golang.org/相关包报错问题
- 游戏运营数据解析-MAU DAU DAU/MAU
- 一文了解NFT的六大交易平台
- nginx 做端口转发
- 做一个即时利润表仪表板(不用等账都做完核对完关账后)