本文你会获得什么!
1、charles的使用。例如,charles在线调试别人网站js加载数据。
2、网易云音乐加密算法。
3、一些非常有用的python3爬虫基础。
4、最有价值的是:思路!(画重点)
产生爬虫需求的原因:
1、团队开发了资讯类的APP,产品属于新生儿阶段,无流量、无人气,无推广,要让自然下载的100个用户感觉到存在感。起码浏览量、点赞量、评论数看起来还可以!浏览量、点赞量都是数据库的数据,做一个随时间螺旋刷量的算法即可,可评论数就得自己1条条写了,so…
2、网易云音乐作为音乐类app鄙视链顶端的产品,有很多不错的音源。作为一个视频、图片、音乐素材收藏爱好者,还是有私心想免费收藏一些作品的。
思路
拿来主义横行!百度、CSDN、开源中国、github、segmentfault,翻个遍,爬虫的90%基本能搞定。已有很多巨人分享了足够多的肩膀。一个人的经验不行,多踩几个人,基本就能满意。
是否涉嫌抄袭,我是这么理解的。换变量,换个说法原理基本一样,那就是洗代码,抄袭。在源代码、原理基础上做延伸、扩充,有自己的应用场景,应该不算抄袭吧!
参考博文: https://whttps://www.imooc.com/article/36601ww.imooc.com/article/36601 https://blog.csdn.net/weixin_36605200/article/details/82318308 https://blog.csdn.net/zwt520123/article/details/80374952 https://segmentfault.com/a/1190000014948845
参考意思代码后,用chrome测试,总结思路: 网页版歌曲地址:https://music.163.com/#/song?id=32358712 评论post到服务器的地址:https://music.163.com/weapi/v1/resource/comments/R_SO_4_32358712?csrf_token= post出去的参数有2个:
- params: BQ6JTJgI4+UtU3u1YRFu1w2Liq7blmYUAP5juKKuNou6goJKHVGzte/H38TEUpvxQmb9ESKgUKjutZTg/ruX98T8AnyMGNqSp7seTJEb+WQDcgHkK05Yb8lPzKGYeyy+TYejZAcJzyo9r7jOHlnwwSREEmlMMBCrh0KJB8atsl9nwnBIOkTTrRDbrHfhvZbd
- encSecKey: 751a8a2d0f052e9da30816f3dfda417c9149d896b59d25bc0d6365c43a587ce55a92b272b89d91f6fe232c3685ebf5813565c862152a82502886301e4dc96830b0d49d772d3962f77c97ac17d874c4afbf0cfc711a9e09330b1bcd20be6cc54284266adde11a46166bf958606e33b41dff4ed81e75de7b18b3e1d45fc100e8f4
post到服务器的params和encSecKey加密算法:params是经过4个变量经过2次AES加密,encSecKey是params的RSA加密。参数中1个是变量,其他3个是常量。别问我为什么,大神们已经给出结果了。我们只要去发现参数中那个变量即可。 在此之前要通过大神的文章,搞清楚加密的过程!
验证的思路:
1、charles在线调试core.js代码。
(1)记得把chrome的Network中设置为Disable cache。
(2)下载core_开头的js文件,下载到本地,并用ide软件打开他。
(3)打开js文件,并格式文件。搜索window.asrsea,找到加密函数。有兴趣可以认真研究研究。在下面打入console.log();这个的作用是查找加密的4个量中唯一的变量。
(4)寄出charles,在tool中使用local map,并设置上参数。
charles的下载,破解,配置,ssl的设置就自行百度了吧!
(5)在chrome中刷新一下,进入Console中查看!
参数有好多,这个页面有音乐的,有评论的,还有一个没有研究。
点击第二页评论,又出来一些信息。 首页:{rid: "R_SO_4_32358712", offset: "0", total: "true", limit: "20", csrf_token: ""} 第二页:{rid: "R_SO_4_32358712", offset: "20", total: "false", limit: "20", csrf_token: ""}
爬虫编写
写爬虫前,先pip一些模块requests、json、pycrypto、pandas。
import requests, hashlib, base64, codecs, json, os, sys
from Crypto.Cipher import AES
import pandas as pd
加密过程,已经在上面写上了注释!
编写爬虫!最核心就是get_params这个变量,首页除外,每页评论数都是20个,总的评论数也在json中能找到,所以,有多少页评论,就得提交多少次请求!
开始爬取,爬取后简单清写!
这里因为每页都post一次,获得1个json数据,多页的话就是多个json,就用enumerate函数。这里我去掉了user的信息,比如user的nikename,头像地址等,实际应用中是需要的,简单修改就可以了!
可以不需要精彩评论的数据(hotComments),其实就是评论中likecount最多的降序排序!
hot_comment = json_df.sort_values(['likedCount'], ascending = False).head(12)
hot_comment
其他补充:
1、要抓取歌单中的评论: https://music.163.com/#/playlist?id=2430220144 post出去的需加密的参数为: {rid: "A_PL_0_2430220144", offset: "0", total: "true", limit: "20", csrf_token: ""}
2、抓取歌曲也是类似,只是post出去的需加密的参数为: {ids: "[26465171]", br: 128000, csrf_token: ""} [26465171]表示歌曲id的列表,br是品质:1280000,也可以320000 当然,这样操作也是有局限的。就是会员歌曲是无法下载的!
如果你喜欢,请把我推荐给身边需要的人吧! 商业级的不太方便。只是在这基础上用scrapy+多进程/多线程!
》》微信回复20181017,即可下载源码《《
如果你喜欢,请把我推荐给身边需要的人吧!