python爬虫-爬取酷狗音乐top榜

酷狗音乐top500榜单就是我们今天需要爬取的对象,作为新手入门的代码,只需要将信息爬取下来即可,十分简单,不需要保存到数据库或保存到文件,仅当普通练习。
https://www.kugou.com/yy/rank/home/1-8888.html?from=rank

我们主要利用requests库和BeautifulSoup解析库

1.站点分析

下面是第一页和第二页的请求,很容易发现只需要改变home后面的数据即可翻页(别管底下的下载客户端)。
python爬虫-爬取酷狗音乐top榜_第1张图片
python爬虫-爬取酷狗音乐top榜_第2张图片并且根据数量推断出有23页。

2.主要模块

  • 构造多页URL
 # 构造多页URL
urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(1,24)]

  • 获取信息 排行、歌手名、歌曲名、歌曲时长。
    python爬虫-爬取酷狗音乐top榜_第3张图片
 soup = BeautifulSoup(wb_data.text, 'lxml')
 
 ranks = soup.select('span.pc_temp_num')  # 排行
 titles = soup.select('div.pc_temp_songlist > ul > li > a')  
 times = soup.select('span.pc_temp_tips_r > span')  # 歌曲时长

3.代码

import requests
from bs4 import BeautifulSoup

headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    '(KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}

def get_data(url):
    data=requests.get(url=url,headers=headers)

    soup=BeautifulSoup(data.text,"lxml")

    ranks=soup.select('span.pc_temp_num') #排名
    titles = soup.select('div.pc_temp_songlist > ul > li > a')  # 歌手名和歌曲名
    times=soup.select('span.pc_temp_time')  #时长

    for rank, title, time in zip(ranks, titles, times):
        data = {
            'rank': rank.get_text().strip(),
            'singer': title.get_text().split('-')[0],
            'song': title.get_text().split('-')[1],  # 通过split获取歌手和歌曲信息
            'time': time.get_text().strip()
        }
        print(data)

if __name__=='__main__':
    urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(1,24)]
    for url in urls:
        get_data(url)  # 循环调用get_data()函数

运行结果截图:
python爬虫-爬取酷狗音乐top榜_第4张图片

你可能感兴趣的:(爬虫实战篇)