1.我的目的
爬取热歌榜中所有歌曲的所有评论,并存入mysql数据库
2.分析过程
-
1.首先可以看到每首歌曲都在tbody下的一个tr标签中
即提取热门歌曲中tbody下所有的tr标签就可以得到所有热门歌曲相关信息(这里我们实际主要用于获取每一首歌曲的id)
-
2.然后我们去分析如何获取一首歌曲评论
- 【1】找到获取评论的请求(这个通过查看请求的返回就可以了)
这是一个post请求,而且请求数据被加密了
- 【2】查看JS代码
-
① ctrl+shift+f全局搜索一下encSecKey,然后找到encseckey
-
②对应参数以及函数
可以知道encSecKey和params都是window.asrsea函数产生的,而window.asrsea的四个参数JSON.stringify() ------ 这一个将对象转化为字符串的函数 、 bry7r(`````) ------ 后面三个参数都是由这个函数生成,而传入的参数是定值,所以可以推测这三个参数是定值
函数a我们能够很轻易的知道,这是一个随机生成16个字符的函数,这个我们自己很容易模拟;
函数b、c寻求度娘,这是两个加密函数:
b是AES加密,加密模式为CBC,初始向量为iv,模拟函数依靠百度;
c是RSA加密,模拟函数百度;
(encText经过b函数两次加密,encSecKey经过c函数一次加密) -
③最后就是寻找传入的4个参数是什么
一开始我也想一个函数一个函数的寻,未果,后来知道了更简便的方法:
直接替换JS代码,查看对应传入值是什么- 第一步:将这份js代码保存下来并修改
- 第二步:替換JS文件
清理缓存----刷新页面-----替换JS-----清理缓存-----刷新页面
能看到我们js文件是否替换成功
- 第三步:查看传入的四个参数
后面三个是定量,第一个参数就是评论请求相关的参数:
rid为歌曲id,实测不传入即为空也没关系
offser为页数
total传true就行
limit为请求的个数
csrf_token为空即可
- 第一步:将这份js代码保存下来并修改
-
// 这样所有的参数和函数都已经搞清楚了
-
3.解析返回结果并将保存进mysql数据库
- 【1】返回的结果是一个json数据,利用json.cn中给我们可以更清晰的看到结构
这里我们提取用户名、评论内容、以及好评数(歌曲名在前面获取) - 【2】异步保存进mysql数据库
在数据库中建表,新增对应字段,利用twisted的adbapi新建连接池达到异步存入数据的目的
3.代码
代码地址:https://github.com/zkyws/spider