网易云音乐的所有歌手列表
目錄
1.首頁訪問
2.解析各類歌手url
3.訪問剛剛獲取到的五大分類里面的鏈接,進入到每類歌手的界面
4.請求每個字母的鏈接,獲取到對應的歌手列表,獲取歌手信息
網易云音樂的網址:https://music.163.com/
1.首頁訪問
我們的需求是要爬取網易云音樂的所有歌手,點擊歌手,
得到接口:https://music.163.com/discover/artist
這里有個問題需要注意一下,我們注意到當我們在網頁上點擊歌手之后,網址是https://music.163.com/#/discover/artist
但是我們寫好代碼請求這個頁面的時候是獲取不到的,所以我們請求的接口應該把中間的那個#去掉,寫成: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標簽里面
先把這幾類下面的每種鏈接都獲取出來
我們可以看到鏈接到放到每一個div>ul>li>a:href
但是a標簽href里面的標簽不完整,需要拼接一下
鏈接格式應該是:‘https://music.163.com’+‘/discover/artist/cat?id=1001’
代碼實現如下所示:
# 解析各類歌手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.訪問剛剛獲取到的五大分類里面的鏈接,進入到每類歌手的界面
在這里我們以華語男歌手為例,可以看到頁面上展示出來的歌手肯定不全,上面有一欄寫著熱門,A.B.C.D........
我們把A.B.C.D......這些都遍歷出來,就可以完整的爬取到歌手了
打開F12分析一下界面
(1)可以看到A.B.C.D.....對應的是class="n-ltlst f-cb"的ul標簽下面的li元素
但是我們不需要獲取熱門里面的內容,所以要把第一個li去掉
這里有兩種方法:pop(0) ; xpath的位謂語position()>1進行限制
(2)獲取每個字母下面的鏈接:
很容易看見是在上面找的li元素的a標簽的href屬性里面
鏈接地址同樣也需要拼接
代碼實現如下:
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.請求每個字母的鏈接,獲取到對應的歌手列表,獲取歌手信息
每一個歌手的信息都寫在class="m-sgerlist"的div標簽的ul>li標簽
歌手的名字都在div>ul>li>p>a>text()
代碼實現:
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)?
總結
以上是生活随笔為你收集整理的网易云音乐的所有歌手列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python容错
- 下一篇: LightOJ - 1027 A Dan