爬取QQ音乐巅峰榜

今天爬了第二个动态网页,晚上赶紧来回顾一下。
如图
一共4页。100首歌曲。

同样的方法还是在network中抓包,
如图
获取真正的url,然后通过分析得出url的翻页规律。
此处的url:https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?tpl=3&page=detail&date=2019-03-01&topid=4&type=top&song_begin={}
括号内从0开始,步幅是30.也就是说每次翻页,begin后面的数字+30。

如图
如图
在response中我们可以看到页面的响应。通过解析json数据,我们可以看到,这里面有歌手姓名,歌曲名字,歌曲的时长是interval对应的值,这里面用的单位是秒。我们提取后转换一下就可以了。

另外一点就是这个数据包有点坑,开始我爬的时候总是感觉爬下来的数据很多,最后我发现,我们爬的第一个url就加载了所有页面的信息,而第三个url又包含了第四页的页面信息。
OK,开代码:

#动态
#0加载了4页信息,60加载了3、4页的信息
import csv
import requests
import json

fp = open("F:/QQ音乐_0.csv",'wt',newline='',encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(['歌曲','歌手','时间'])

#因为第一个页面就加载了所有的信息,就不需要翻页了,要不然会重复
urls = ["https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?tpl=3&page=detail&date=2019-03-01&topid=4&type=top&song_begin={}".format(i) for i in range(0,1)]
for url in urls:
    print(url)
    r = requests.get(url)
    results = json.loads(str(r.text))
    fins = results.get("songlist")
    for fin in fins:
        names = fin.get("data").get("singer")
        #向获取到这里,这是一个列表,不能再用get,需要转换一下格式
        author = names[0].get("name")#歌手
        songnames = fin.get("data").get("songname")#歌手
        times = fin.get("data").get("interval")#时间
        #网页数据中给的时间是以s为单位我们要转换为分
        time = str(int(times)//60) + ':'+str(int(times)%60)
        writer.writerow([songnames,author,time])

fp.close()


最后结果会是这样:
如图
我们需要用记事本方式打开,并且另存为,将

如图

编码方式设为UTF-8
再打开就可以了:
如图

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值