python爬取音乐排行_Python爬取酷狗Top500的歌曲!够你吹个小牛皮了吧
一、準備工作
安裝 requests 庫和 beautifulsoup4 庫:
requests 庫是處理HTTP請求的一個簡潔且簡單的第三方庫;beautifulsoup4 庫是一個解析和處理HTML 和 XML 的第三方庫。
二、對網(wǎng)站HTML源碼進行分析
通過對 HTML 源碼進行分析,“ 歌手-歌名 ” 信息被封存在標簽中,標簽在 “class=pc_temp_songlist” 的 標簽中。因此,可以用在beautifulsoup4 中的 select 方法來進行篩選:
同樣對歌曲時長的分析方法也是跟上面一樣,對 select 的具體用法可以參考如下:
Python中在BeautifulSoup庫里的find_all、select用法
三、爬取酷狗Top500的歌曲
import requestsfrom bs4 import BeautifulSoupimport json
# 獲取網(wǎng)頁的HTML源碼
def getText(url): try: r = requests.get(url, timeout=30)
# get()函數(shù)的參數(shù)url必須鏈接采用HTTP或HTTPS方式訪問,每次請求超時時間為30秒
r.raise_for_status()
# 返回的請求狀態(tài)status_code不是200,這個方法會產(chǎn)生一個異常
r.encoding = 'utf-8'
# 對encoding屬性賦值更改編碼方式
return r.text except: return ""
# 解析HTML頁面格式,提取有用信息
def getInfo(url): soup = BeautifulSoup(getText(url), 'html.parser')
# 創(chuàng)建一個BeautifulSoup對象
songs = soup.select('.pc_temp_songlist > ul > li >a')
# 獲取包含“歌手-歌名”信息的標簽
times = soup.select('.pc_temp_songlist > ul > li > span .pc_temp_time')
# 獲取包含“歌曲時長”信息的標簽
for song, time in zip(songs, times): data = { "singer": song.get_text().split('-')[0],
"song title": song.get_text().split('-')[1],
"time": time.get_text().strip() }
print(data) SONGS.append(data)SONGS = []if __name__ == '__main__':
urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(1, 24)]
for url in urls: getInfo(url)
print("歌曲數(shù)量:", len(SONGS))
# 爬取的數(shù)據(jù)以JSON文件格式保存
with open('songs.json', 'w', encoding='utf-8')
as json_file: json_str = json.dumps(SONGS, ensure_ascii=False, indent=4)
json_file.write(json_str)
最終生成的json文件格式如下: 非常簡單
總結(jié)
以上是生活随笔為你收集整理的python爬取音乐排行_Python爬取酷狗Top500的歌曲!够你吹个小牛皮了吧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3__绘图__常用数据分析图
- 下一篇: 虹科为您介绍如何实现多相机同步技术