网易云音乐的所有歌手列表
目錄
1.首頁訪問
2.解析各類歌手url
3.訪問剛剛獲取到的五大分類里面的鏈接,進(jìn)入到每類歌手的界面
4.請求每個(gè)字母的鏈接,獲取到對應(yīng)的歌手列表,獲取歌手信息
網(wǎng)易云音樂的網(wǎng)址:https://music.163.com/
1.首頁訪問
我們的需求是要爬取網(wǎng)易云音樂的所有歌手,點(diǎn)擊歌手,
得到接口:https://music.163.com/discover/artist
這里有個(gè)問題需要注意一下,我們注意到當(dāng)我們在網(wǎng)頁上點(diǎn)擊歌手之后,網(wǎng)址是https://music.163.com/#/discover/artist
但是我們寫好代碼請求這個(gè)頁面的時(shí)候是獲取不到的,所以我們請求的接口應(yīng)該把中間的那個(gè)#去掉,寫成:https://music.163.com/discover/artist
# 首頁訪問 url = 'https://music.163.com/discover/artist' headers = {'user-agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"} response = requests.get(url=url, headers=headers) content = response.content.decode('utf-8') with open('wangyiyun.html', 'w', encoding='utf-8') as fp:fp.write(content)2.解析各類歌手url
首先我們看到歌手先有五種分類:華語,歐美,日本,韓國,其他
在前端頁面都被寫在class="blk"的div標(biāo)簽里面
先把這幾類下面的每種鏈接都獲取出來
我們可以看到鏈接到放到每一個(gè)div>ul>li>a:href
但是a標(biāo)簽href里面的標(biāo)簽不完整,需要拼接一下
鏈接格式應(yīng)該是:‘https://music.163.com’+‘/discover/artist/cat?id=1001’
代碼實(shí)現(xiàn)如下所示:
# 解析各類歌手url tree = etree.HTML(content) group_list = tree.xpath('//div[@class="blk"]') print(len(group_list)) for group in group_list:# 歌手分類group_name = group.xpath('.//a/text()')# print(group_name)# 鏈接group_link = group.xpath('.//a/@href')# print(group_link)for i, j in zip(group_name, group_link):# 歌手地址link = 'https://music.163.com' + j3.訪問剛剛獲取到的五大分類里面的鏈接,進(jìn)入到每類歌手的界面
在這里我們以華語男歌手為例,可以看到頁面上展示出來的歌手肯定不全,上面有一欄寫著熱門,A.B.C.D........
我們把A.B.C.D......這些都遍歷出來,就可以完整的爬取到歌手了
打開F12分析一下界面
(1)可以看到A.B.C.D.....對應(yīng)的是class="n-ltlst f-cb"的ul標(biāo)簽下面的li元素
但是我們不需要獲取熱門里面的內(nèi)容,所以要把第一個(gè)li去掉
這里有兩種方法:pop(0) ; xpath的位謂語position()>1進(jìn)行限制
(2)獲取每個(gè)字母下面的鏈接:
很容易看見是在上面找的li元素的a標(biāo)簽的href屬性里面
鏈接地址同樣也需要拼接
代碼實(shí)現(xiàn)如下:
singer_content = requests.get(link).content.decode('utf-8')tree = etree.HTML(singer_content)singer_url = tree.xpath('//ul[@class="n-ltlst f-cb"]/li[position()>1]/a/@href')print(singer_url)for url in singer_url:full_url = 'https://music.163.com' + urlprint(full_url)4.請求每個(gè)字母的鏈接,獲取到對應(yīng)的歌手列表,獲取歌手信息
每一個(gè)歌手的信息都寫在class="m-sgerlist"的div標(biāo)簽的ul>li標(biāo)簽
歌手的名字都在div>ul>li>p>a>text()
代碼實(shí)現(xiàn):
singer_info = requests.get(full_url).content.decode('utf-8') tree = etree.HTML(singer_info) li_list = tree.xpath('//div[@class="m-sgerlist"]/ul/li/a/text()') for li in li_list:print(li)?
總結(jié)
以上是生活随笔為你收集整理的网易云音乐的所有歌手列表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python容错
- 下一篇: php判断中英文请求,并实现跳转