爬取QQ音乐巅峰榜

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43901998/article/details/88070568

今天爬了第二个动态网页,晚上赶紧来回顾一下。
如图
一共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
再打开就可以了:
如图

展开阅读全文

没有更多推荐了,返回首页