基于上一篇的介绍,想必大家都学会了如何爬取一位歌手的热门50首歌的歌词了,但是输出的结果在命令行里面,可能我们希望能不能将爬取的歌词内容保存为文本格式并存储起来呢,那么今天我们介绍如何将爬取的内容作为一个文本保存。
先将我们上一篇爬取热门50首歌的代码写上

import requests
import json
import re
from bs4 import BeautifulSoupdef download_by_music_id(music_id):#根据歌词id下载url = 'http://music.163.com/api/song/lyric?'+ 'id=' + str(music_id)+ '&lv=1&kv=1&tv=-1'r = requests.get(url)json_obj = r.textj = json.loads(json_obj)lrc = j['lrc']['lyric']pat = re.compile(r'\[.*\]')  #这里几行代码是把歌词中的空格和符号之类的去掉lrc = re.sub(pat,"",lrc)  lrc = lrc.strip()return lrcdef get_music_ids_by_musican_id(singer_id): #通过一个歌手id下载这个歌手的所有歌词singer_url = 'http://music.163.com/artist?'+ 'id='+str(singer_id)r = requests.get(singer_url).textsoupObj = BeautifulSoup(r,'lxml')song_ids = soupObj.find('textarea').textjobj = json.loads(song_ids)for item in jobj:print(item['id'])print(download_by_music_id(item['id']))get_music_ids_by_musican_id(2116) #括号内为歌手id

现在我们想建立一个文件夹,文件夹的名称或许可以用歌手的id名,然后把50首歌依次用TXT文本格式保存,文本的名称用歌曲的名称。

我们可以有下面大概的思路
1.先创立一个字典,用歌曲的名称索引歌曲的id
2.然后在函数中将这个字典返回
3.建立一个将下载好的歌词依次保存为文本格式的函数
4.调用函数保存歌词到本地

首先需要对我们解析文本的函数进行修改,使得函数能够成功返回歌词名和歌词id的字典
定义一个字典ids:

ids = { }

遍历整个爬取出来的json格式内容,提取当中的歌词名和歌词id,并把歌词名作为歌词id的索引:

for item in jobj:ids[item['name']] = item['id']

然后将该字典作为返回值返回
字典打印出来是这样的:

{'淘汰': 65528, '不要说话': 25906124, '阴天快乐': 28563317, '好久不见': 65538, '富士山下': 65766, '可以了': 28481818, '红玫瑰(国)': 65126, '最佳损友': 65800, '浮夸': 64886, '你给我听好': 28481103, '一丝不挂': 64634, '稳稳的幸福': 25730757, '孤独患者': 64093, '陪你度过漫长岁月': 35403523, '红玫瑰': 65533, '爱情转移': 65536, '因为爱情': 64317, '倾城': 27867449, '落花流水': 64922, '爱情转移(国)': 65099, '沙龙': 64833, '苦瓜': 64293, '白玫瑰': 65761, '于心有愧': 64797, '内疚': 64126, '葡萄成熟时': 66285, '不如不见': 65769, '北京欢迎你': 5250116, '最冷一天': 186331, '心的距离': 64699, '完': 64048, '让我留在你身边': 438801672, '无条件': 31426608, '失忆蝴蝶': 27483203, '斯德哥尔摩情人': 27483204, '陀飞轮': 64638, '夕阳无限好': 66272, '好久不见(国)': 65078, '四季': 437802725, '裙下之臣': 65758, '兄弟': 65487, 'Sleep Alone': 36539010, '阿牛': 66265, '承诺(香港版)': 5251209, '梦想天空分外蓝': 25638273, '预感': 67787, '无人之境': 64625, '给你': 64706, '粤语残片': 65778, '谁来剪月光': 493283125}

嗯…….现在来构建一个将歌词保存的函数:
把它命名为download_lyric(uid)

def download_lyric(uid):os.mkdir(str(uid))os.chdir(str(uid))

这里需要用到一些OS模块关于文件操作的一些内容,在这里我就不再介绍,有兴趣的可以自行翻阅官方文档或者他人写的OS模块知识。
os.mkdir()是创建一个一级目录,这里我们用歌手的id作为文件名,所以参数为str(uid)
os.chdir()是选择当前目录,道理和上面是一样的。

然后通过上一个函数获取该歌手热门50首歌曲的字典

music_ids = get_music_ids_by_musican_id(uid)

获取字典后,依次对字典中的每一个项进行下载读入操作,
这段代码比较简单,我就先直接放上去了

for key in music_ids:text = download_by_music_id(music_ids[key])file = open(key + '.txt','a',encoding='utf-8')file.write(key +'\n')file.write(text)file.close()

其中我们希望在文本开头能将歌曲的名字写入,于是添加了下面一行代码

file.write(key +'\n')

然后当中对文件的操作就十分简单了。打开-写入-关闭

之后调用该函数,就能输出结果了。
得到的结果大概是这样的

整体代码如下:

import requests
import json
import re
from bs4 import BeautifulSoup
import osdef download_by_music_id(music_id):#根据歌词id下载url = 'http://music.163.com/api/song/lyric?'+ 'id=' + str(music_id)+ '&lv=1&kv=1&tv=-1'r = requests.get(url)json_obj = r.textj = json.loads(json_obj)lrc = j['lrc']['lyric']pat = re.compile(r'\[.*\]')lrc = re.sub(pat,"",lrc)lrc = lrc.strip()return lrcdef get_music_ids_by_musican_id(singer_id): #通过一个歌手id下载这个歌手的所有歌词singer_url = 'http://music.163.com/artist?'+ 'id='+str(singer_id)r = requests.get(singer_url).textsoupObj = BeautifulSoup(r,'lxml')song_ids = soupObj.find('textarea').textjobj = json.loads(song_ids)ids = {}for item in jobj:ids[item['name']] = item['id']return ids
def download_lyric(uid):os.mkdir(str(uid))os.chdir(str(uid))music_ids = get_music_ids_by_musican_id(uid)for key in music_ids:text = download_by_music_id(music_ids[key])file = open(key + '.txt','a',encoding='utf-8')file.write(key +'\n')file.write(text)file.close()print("请输入歌手的id:")
singer_id = input()
download_lyric(singer_id)

大家在爬取歌词的时候,可能会遇到编码或者其他错误,是因为有些歌词包含了非法字符或者是没有歌词的纯音乐,这时我们可以利用python中的try……expect语句跳过这些错误使得程序继续运行,try……expect语句是python中经常会用到的语句,有兴趣的不妨多了解一下,在后面的学习中我们也会提到的。大家国庆快乐!!

Python 3爬虫网易云(十)—— 爬取歌词读入文件存储相关推荐

  1. python处理json数据——网易云评论爬取

    python处理json数据--网易云评论爬取 准备 代码 准备 1.python 3.7 2.需要安装的库: requests jsonpath pandas time fake_useragent ...

  2. Python 小小爬虫练手,爬取自己的IP

                 Python 小小爬虫练手,爬取自己的IP import re import urllib.request url="http://2020.ip138.com/i ...

  3. 爬虫篇——代理IP爬取备用及存储

    爬虫篇--代理IP爬取备用及存储 代码 代码 本文通过抓取免费的高匿IP代理,将其写入列表并保存为json格式文件,且将代码进行了封装,方便以后抓取数据时动态的更新handle的IP地址,从一方面避免 ...

  4. [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地

    前面 "Python爬虫之Selenium+Phantomjs+CasperJS" 介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分 ...

  5. python网络爬虫网易云音乐下载_python网络爬虫爬取网易云音乐

    #爬取网易云音乐 url="https://music.163.com/discover/toplist" #歌单连接地址 url2 = 'http://music.163.com ...

  6. 爬虫python代码网易云_python爬取网易云音乐热歌榜实例代码

    首先找到要下载的歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更改你要保存的目录,目录要先建立好文件夹,例如我 ...

  7. Python 3爬虫网易云(八)—— 对网易云歌词的爬取

    今天开始正式的网易云爬虫的实战吧,今天先做一个非常简单的小例子,但是稍微有一点小弯绕.在这之前,想必大家也用爬虫爬过妹子图和百度贴吧入门爬虫了. 好,那么先打开网易云中的一首歌(这里以火狐浏览器为例) ...

  8. Python爬虫实战:网易云音乐爬取!

    本次目标 爬取网易云音乐 https://music.163.com/ PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 环境 ...

  9. python网络爬虫网易云音乐_一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取...

    标签下,如下图所示: 接下来我们利用美丽的汤来获取目标信息,直接上代码,如下图: 此处要注意获取ID的时候需要对link进行切片处理,得到的数字便是歌曲的ID:另外,歌曲名是通过get_text()方 ...

最新文章

  1. 随机森林是我最喜欢的模型
  2. 2020人工神经网络第一次作业-参考答案第二部分
  3. 真实版删库跑路,宕机36小时市值蒸发9亿!
  4. 120所国家重点建设大学(211工程和教育部直属)[国家一类本科大学]详细情况一览表...
  5. 多线程读取文件File
  6. ubuntu 安装 LAMP
  7. 【Python】读写文件的操作
  8. iPhone卖不出去 采购未达标 苹果“补偿”三星6.83亿美元
  9. Linux之VMware Workstation16 pro上安装redhat
  10. chrome浏览器js 导出excel
  11. 值得分享的炒白银技巧有哪些?
  12. PCI驱动的注册和初始化
  13. Transformer12
  14. Codeforces1575 D. Divisible by Twenty-Five(dp)
  15. 校园外卖点餐系统——Day04【菜品管理业务开发】
  16. 炼石喜获“2020中国网络安全产业联盟突出贡献单位奖”
  17. android中pdf转html代码,在线实现PDF转HTML网页格式
  18. 腾讯云服务器的项目部署
  19. linux一键安装虚拟机系统
  20. UVA-10929-You can say 11(秦九昭算法+同余与模算术)

热门文章

  1. 服务器遭到入侵被抓肉鸡应该怎么办---宇众网络
  2. 如何创建网站?网站制作基本流程详解
  3. 在ESXi界面给虚拟机配的内核数与虚机内任务管理器显示数不一致
  4. Tera CLOUD + Zotero 文献管理
  5. 电脑不自检自动进入系统
  6. android录音倒计时,android MediaRecorder实现录音功能 显示时间 计时
  7. react 接入企业微信登录组件
  8. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 2: illegal multibyte sequence
  9. Java编写的公交查询系统 功能非常齐全 完整源码
  10. 压力测试工具Jmeter的简单使用