Python 3爬虫网易云(九)—— 获取一个歌手的热门50首歌词
2017-09-27 09:51
183 查看
上一篇已经介绍了如何获取一首歌的歌词,今天那就介绍一下如何通过一个歌手的id获取他的热门50首的歌词吧。
1.找入口
要爬取一位歌手的歌曲,首先在网易云中要获得歌曲的id,在这推荐用火狐浏览器,其中的firebug插件对网页的解析很有帮助。这里以爬取陈奕迅的热门50首为例。
我们会发现歌曲的id是包含在a标签中的href中的
那么可能大家有人会想直接把网页源码下载下来,然后用BeautifulSoup解析把歌曲id提取出来然后下载歌词。但是你会发现这个信息是通过js的后期渲染加进去的,进入网页响应,可以发现它是隐藏在textarea中,所以我们把textarea中的内容提取出来:
2.请求和返回
提取textarea字符内容singer_url = 'http://music.163.com/artist?'+ 'id=2166' r = requests.get(singer_url).text soupObj = BeautifulSoup(r,'lxml') song_ids = soupObj.find('textarea').text print(song_ids)
运行结果(太长省略后半部分)
[{"commentThreadId":"R_SO_4_65528","score":100.0,"copyrightId":7003,"mvid":303133,"transNames": 4000 null,"name":"淘汰","id":65528,"type":0,"duration":285000,"no":2,"fee":8,"ftype":0,"status":3,"alias":[],"album":{"id":6434,"name":"认......
到这里后,我们的思路应该是
先用json库格式
然后在从里面依次把歌曲的id提取出来
那么代码改为singer_url = 'http://music.163.com/artist?'+ 'id=2166' r = requests.get(singer_url).text soupObj = BeautifulSoup(r,'lxml') song_ids = soupObj.find('textarea').text jobj = json.loads(song_ids) for item in jobj: print(item['id'])
运行结果(中间有省略)
65528 25906124 28563317 65766 65538 28481818 65800 65126 64886 28481103 64634 ...... 65487 437802725 36539010 66265 65078 65758 5251209 64706 25638273 67787 64625 493283125 65778
这里我们就把热门50首的id成功提取出来
然后把上一篇下载歌词的代码写入就可以下载好一位歌手的热门50首歌曲的全部歌词啦
完整代码如下
import requests import json import re from bs4 import BeautifulSoup def 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.text j = json.loads(json_obj) lrc = j['lrc']['lyric'] pat = re.compile(r'\[.*\]') #这里几行代码是把歌词中的空格和符号之类的去掉 lrc = re.sub(pat,"",lrc) lrc = lrc.strip() return lrc def 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).text soupObj = BeautifulSoup(r,'lxml') song_ids = soupObj.find('textarea').text jobj = 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
运行结果(中间有省略)
作曲 : 周杰伦 作词 : 周杰伦 我说了所有的谎 你全都相信 简单的我爱你 你却老不信 你书里的剧情 我不想上演 因为我喜欢喜剧收尾 我试过完美放弃 的确很踏实 醒来了 梦散了 你我都走散了 情歌歌词何必押韵 就算我是K歌之王 也不见得把爱情唱得完美 只能说我输了 也许是你怕了 我们的回忆没有皱褶 你却用离开烫下句点 只能说我认了 你的不安赢得你信任 我却得到你安慰的淘汰 ...... 作词 : 周博贤 乔迁那日打扫废物 家居仿似开战 无意发现当天 穿返学夏季衬衣 奇怪却是茄汁污垢 渗在这衬衣布章外边 极其大意 为何如此 想那日初次约会 心惊手震胆颤 忙里泄露各种的丑态像丧尸 而尴尬是快餐厅里 我误把浆汁四周乱溅 骇人场面相当讽刺 你及时递上餐纸 去为我清洗衬衣 刹那间身体的触碰大件事 今天看这段历史 像褪色午夜残片 笑话情节此刻变窝心故事 现时大了那种心跳难重演 极灿烂时光 一去难再遇上一次 怎努力都想不起 初恋怎会改变 情侣数字我屈指一算大概知 奇怪却是每恋一次 震撼总逐渐变得越浅 令人动心只得那次 有没捱坏了身子 会为哪位披嫁衣 你有否挂念当天这丑小子 今天看那段历史 像褪色午夜残片 笑话情节此刻变窝心故事 现时大了那种心跳难重演 极灿烂时光 一去难再遇上一次 在混乱杂物当中找到 失去的往事 但现在杂物与我 举家将会搬迁 让记念成历史 想想那旧时日子 像褪色午夜残片 任何情节今天多一种意义 现时大了那种心跳难重演 极爆裂场面 想再遇确实靠天意
相关文章推荐
- Python Requests爬虫——获取一个收藏夹下所有答案的图片
- Python 3爬虫网易云(十)—— 爬取歌词读入文件存储
- python爬虫三:获取一个网易用户的所有图片(selenium+phantomjs)
- 爬虫实战【11】Python获取豆瓣热门电影信息
- Python爬虫网易云歌词及词频统计--(周杰伦top50)
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
- 如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析
- 一个用Python编写的股票数据(沪深)爬虫和选股策略测试框架
- python写一个爬虫(3)
- python爬虫获取淘宝妹子信息和相片
- 一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
- 用python写一个简单的爬虫保存在json文件中
- python3.4写一个爬虫程序2
- Python爬虫项目,获取所有网站上的新闻,并保存到数据库中,解析html网页等(未完待续)
- python爬虫 抓取一个网站的所有网址链接
- 用python做一个可以下载电影天堂最新电影的爬虫
- Python 网络爬虫 002 (入门) 爬取一个网站之前,要了解的知识
- Python编写一个简单的简单的爬虫-下载保存在本地
- Python实战:Python爬虫学习教程,获取电影排行榜