爬虫:网易云热门歌曲所有评论爬取(详细)

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为空即可

// 这样所有的参数和函数都已经搞清楚了

  • 3.解析返回结果并将保存进mysql数据库
    
  • 【1】返回的结果是一个json数据,利用json.cn中给我们可以更清晰的看到结构
    在这里插入图片描述
    这里我们提取用户名、评论内容、以及好评数(歌曲名在前面获取)
  • 【2】异步保存进mysql数据库
    在数据库中建表,新增对应字段,利用twisted的adbapi新建连接池达到异步存入数据的目的

3.代码

代码地址:https://github.com/zkyws/spider

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值