Python学习-爬取酷狗TOP500的数据

分析网址结构

1、原网址结构

页数URL
1https://www.kugou.com/yy/rank/home/1-8888.html?from=rank
2https://www.kugou.com/yy/rank/home/2-8888.html?from=rank
3https://www.kugou.com/yy/rank/home/3-8888.html?from=rank
23https://www.kugou.com/yy/rank/home/23-8888.html?from=rank

共23页500条数据
2、分析URL地址
分析可知网址结构的公共部分为:https://www.kugou.com/yy/rank/home/{?}-8888.html?from=rank

{?}:变量部分

3、构造URL循环列表
使用for循环构造列表内容,代码如下:

// An highlighted block
urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(number) for number in range(1, 24)]  # 总共23URL

代码编写

需要引入requests、BeautifulSoup和time库,代码如下:

// An highlighted block
import requests
from bs4 import BeautifulSoup
import time

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'}

#开始获取数据
def get_info(url):
    result = requests.get(url,headers=headers)
    soup = BeautifulSoup(result.text,'html.parser')
    ranks = soup.select('span.pc_temp_num')
    links = soup.select('div.pc_temp_songlist > ul > li > a')
    titles = soup.select('div.pc_temp_songlist > ul > li > a')
    times = soup.select('div.pc_temp_songlist > ul > li > span.pc_temp_tips_r > span')
    for rank,link,title,time in zip(ranks,links,titles,times):#多重循环
        data = {
            'rank':rank.get_text().strip(),
            # 'title':title.get_text().strip(),
            'link':link.get('href'),#歌曲链接
            'singer':title.get_text().strip().split('-')[0],
            'song':title.get_text().strip().split('-')[1],
            'time':time.get_text().strip()
        }
        print(data)


if __name__=='__main__':
    urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(number) for number in range(1, 24)]  # 总共23URL
    # get_info(urls[0])
    i=0
    for url in urls:
        i=i+1
        print("爬取第{}页数据".format(i))
        get_info(url)
        time.sleep(1)#程序暂停1

运行结果

爬取结果展示

END

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值