Python系列模拟登录之网易云个人听歌排行榜爬取 !
前言
那么今天我们就来爬一波网易云个人听歌排行榜吧。让我们愉快地开始吧~
开发工具
Python版本:3.6.4
相关模块:
argparse模块;
DecryptLogin模块;
prettytable模块;
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
DecryptLogin安装方式参见(因为经常更新,已经安装过的小伙伴麻烦记得更新一下,否则可能会在新的案例中报错)
原理简介
首先,打开网易云,随便找个用户刷新他的听歌排行榜页面并抓包:
发现只要请求类似这样的链接就可以获得该用户的听歌排行榜了:
https://music.163.com/weapi/v1/play/record?csrf_token=90f3b95109118c7335b896e2c24d7ebd
返回的数据是这样的:
现在考虑一下怎么构造这个请求,首先是csrf_token这个东西从哪来,之前的文章其实说过,在用户登录后的cookies里可以直接找到该参数,如下图红框所示(当然如果在非登录状态下也能看到目标用户的听歌排行榜,那么这个csrf_token其实是可有可无的):
接着考虑一下怎么算post参数,因为DecryptLogin库里已经写好了,所以我们这里只考虑怎么得到post数据的原文,查看一下initiator,发现Ajax请求的发起方是某core.js文件:
点进去在对应的位置打个断点(也就是需要用post数据的原文来计算最终的post参数的函数那里,至于怎么找到的,全局搜索encSecKey,然后简单分析一下它的计算流程就可以找到了这个函数啦),然后重新运行一下脚本,我们就可以看到post数据的原文啦:
于是我们就可以愉快地开始写代码啦,核心代码如下:
'''获得某用户的听歌排行榜''' def getLeaderboard(self, uid):url = 'https://music.163.com/weapi/v1/play/record?csrf_token=' + self.csrfdata = {'type': '-1','uid': uid,'limit': '1000','offset': '0','total': 'true','csrf_token': self.csrf}res = self.session.post(url, headers=self.headers, data=self.cracker.get(data))res_json = res.json()leader_board = {'weekData': [], 'allData': []}if res_json['code'] == 200:all_data = res_json.get('allData')for item in all_data:songname = item.get('song').get('name')songid = item.get('song').get('id')play_count = item.get('playCount')leader_board['allData'].append([songid, songname, play_count])week_data = res_json.get('weekData')for item in week_data:songname = item.get('song').get('name')songid = item.get('song').get('id')play_count = item.get('playCount')leader_board['weekData'].append([songid, songname, play_count])else:raise RuntimeError('Fail to get leaderboard for %s...' % uid)return leader_board
近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地
Python系列模拟登录之网易云个人听歌排行榜爬取 !相关推荐
- python网易云听歌时长_网易云一起听歌时间怎么不变_一起听歌为什么一直一分钟_3DM手游...
在网易云音乐中一起听歌的时候,是会显示用户听歌时间等信息的,但是有的小伙伴发现,自己听了很长时间的歌,听歌时长却一直不变,一直是1分钟,这是怎么回事呢?网易云一起听歌时间不变怎么办?下面我们就一起来看 ...
- 听歌识曲java_Android自定义View之继承扩展(仿网易云音乐听歌识曲)
前言 上篇文章说到了自定义View的组合实战,链接:Android自定义View之组合实战(以支付宝页面为例) ,感兴趣的同学可以看看.今天要分享的是一个模仿网易云音乐听歌识曲界面的自定义View,实 ...
- python爬取网易云音乐热评_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
- Python爬取网易云音乐热歌排行榜Top200音乐
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- python爬取网易云音乐评论分析_Python爬取网易云音乐评论(附加密算法)
网易云音乐,里面汇聚了哲学家,小说家,story-teller,皮皮虾等各种人才,某些评论非常值得收藏(甚至开了一个歌单专门收藏它们).竟然这么好玩,何不尝试把他们爬取下来呢? 前置需求 可选:fid ...
- python爬取网易云音乐评论分析_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
- python模拟登录qq账号密码_QQ邮箱模拟登录(密码、头像、QQ邮箱爬取)
密码登录 from selenium import webdriver #导入webdriver from selenium.webdriver.chrome.options import Optio ...
- 网易云音乐听歌量爬虫(免登陆版)
最近学习了一下爬虫的原理和基本的思路, 并且利用selenium + Python + Chrome 进行了一系列的爬虫. 最开始的想法是, 想每天爬取自己网易云音乐的一些数据, 比如每天听歌量, 之 ...
- Chrome插件:网易云音乐听歌识曲
大家好,我是若川.持续组织了8个月源码共读活动,感兴趣的可以 点此加我微信ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...
最新文章
- 1万粉的小红书kol报价_小红书母婴博主资源怎么找?小红书母婴种草软文撰写技巧分享!...
- 哪些业务流程和RPA更匹配?
- [原]消耗CPU资源的shell脚本
- [JSOI2007]麻将
- Python 中print 和return 的区别
- systemd-run 中文手册
- c语言recover函数的功能是,c语言实验报告(附答案版).doc
- 《Algorithms》Comparable 实现选择排序
- VS2008引用webservice的奇怪BUG解决方案
- VLFeat工具包在matlab使用方法
- esp-idf的内存管理——tlsf算法
- 星空特效HTML代码,旋转的星空特效代码
- angularjs+uib-pagination实现同一页面多个分页功能
- 交叉编译wpa_supplicant常见问题总结
- Android apk瘦身
- 一些有难度的网络流问题
- 显示器接服务器后黑屏,笔记本外接显示器黑屏怎么修复_笔记本外接显示器后黑屏的处理方法...
- VMware虚拟机的创建和启动,保姆式教学
- 杰理之MIC 免电容方案需要设置【篇】
- 为什么很多人工作都不开心?
热门文章
- 稳定性高可用测试——各大厂质量保障实践分享汇总(上)
- android 循环录像功能吗,行车记录仪到底要不要循环录像
- 苹果手机怎么连接蓝牙耳机_苹果手机用什么蓝牙耳机好,适配iphone手机的蓝牙耳机...
- 民事诉讼法 主编 田平安
- 立即报名 | 云原生技术交流 Meetup 广州站已开启,8 月 6 号与你相遇!
- Fast Extrinsic Calibration of a Laser Rangefinder to a Camera阅读理解
- 3D ConvNet Demo运行
- java 显示中文_java显示中文乱码的解决方法
- 今天心情不错,写个随笔。
- dmg写入u盘_轻松教大家用U盘安装Mac OS10.14.1双系统