爬取酷狗TOP500的数据

题目和代码

  爬取https://www.kugou.com/yy/rank/home/1-8888.html?from=rank 排名情况、歌手、歌曲名和歌曲时间。

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd

def get_links():
    links_list = []
    for i in range(1, 24):
        link = "https://www.kugou.com/yy/rank/home/" + str(i) + "-8888.html?from=rank"
        get_info(link)
        time.sleep(1)
        
def get_info(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
              'referer': url}
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text, 'lxml')
    ranks = soup.select('#rankWrap > div.pc_temp_songlist > ul > li > span.pc_temp_num')
    singers_songs = soup.select('#rankWrap > div.pc_temp_songlist > ul > li > a')
    durations = soup.select('#rankWrap > div.pc_temp_songlist > ul > li > span.pc_temp_tips_r > span')
    for r, s, d in zip(ranks, singers_songs, durations):
        rank = r.get_text().strip()
        singer_song = s.get("title").split("-")
        singer = singer_song[0]
        song = singer_song[1]
        duration = d.get_text().strip()
        info_df.loc[rank] = [singer, song, duration]
               
    
if __name__ == "__main__":
    info_df = pd.DataFrame(columns = ['singer', 'song', 'duration'])
    get_links()
    print(info_df)
    info_df.to_excel("kugou_top500.xlsx")
    
    
       singer         song duration
1         海伦          桥边姑娘     3:03
2      要不要买菜            下山     2:53
3         阿冗          你的答案     3:39
4        张韶涵           欧若拉     4:22
5         en            嚣张     4:14
..        ...          ...      ...
496   BEYOND          真的爱你     4:37
497      刘德华           17岁     4:00
498      张敬轩         只是太爱你     4:14
499  尹毓恪、宋祖儿    欧若拉 (Live)     3:44
500      陈奕迅      陪你度过漫长岁月     4:02

[500 rows x 3 columns]

代码分析

  • getlinks()函数,拼接了23个url,即Top500音乐所在的所有网页的url。
  • 用拼接好的url去调用get_info(url)函数,获得每个网页的内容。
  • 每调用一次get_info(url)后,用time.sleep(1)让程序暂停1秒,防止请求网页频率过快而导致爬虫失败。
  • 注意获得排名时,不能使用ranks = soup.select('#rankWrap > div.pc_temp_songlist > ul > li > span.pc_temp_num > strong'),因为只有前三首歌加了红色强调标记。
  • 使用singer_song = s.get("title").split("-")分割字符串,得到歌手和歌名
  • info_df.to_excel("kugou_top500.xlsx"),将爬取内容保存到kugou_top500.xlsx文件中
  • 构造多页URL:
    urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html'.format (str(i)) for i in range(1, 24)]
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值