Python 3爬虫网易云(九) 您所在的位置:网站首页 现时最流行的歌曲 Python 3爬虫网易云(九)

Python 3爬虫网易云(九)

2024-07-12 06:06| 来源: 网络整理| 查看: 265

上一篇已经介绍了如何获取一首歌的歌词,今天那就介绍一下如何通过一个歌手的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":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歌之王 也不见得把爱情唱得完美 只能说我输了 也许是你怕了 我们的回忆没有皱褶 你却用离开烫下句点 只能说我认了 你的不安赢得你信任 我却得到你安慰的淘汰 ...... 作词 : 周博贤 乔迁那日打扫废物 家居仿似开战 无意发现当天 穿返学夏季衬衣 奇怪却是茄汁污垢 渗在这衬衣布章外边 极其大意 为何如此 想那日初次约会 心惊手震胆颤 忙里泄露各种的丑态像丧尸 而尴尬是快餐厅里 我误把浆汁四周乱溅 骇人场面相当讽刺 你及时递上餐纸 去为我清洗衬衣 刹那间身体的触碰大件事 今天看这段历史 像褪色午夜残片 笑话情节此刻变窝心故事 现时大了那种心跳难重演 极灿烂时光 一去难再遇上一次 怎努力都想不起 初恋怎会改变 情侣数字我屈指一算大概知 奇怪却是每恋一次 震撼总逐渐变得越浅 令人动心只得那次 有没捱坏了身子 会为哪位披嫁衣 你有否挂念当天这丑小子 今天看那段历史 像褪色午夜残片 笑话情节此刻变窝心故事 现时大了那种心跳难重演 极灿烂时光 一去难再遇上一次 在混乱杂物当中找到 失去的往事 但现在杂物与我 举家将会搬迁 让记念成历史 想想那旧时日子 像褪色午夜残片 任何情节今天多一种意义 现时大了那种心跳难重演 极爆裂场面 想再遇确实靠天意


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有