zoukankan      html  css  js  c++  java
  • 爬虫之爬取B站视频及破解知乎登录方法(进阶)

    今日内容概要

    • 爬虫思路之破解知乎登录
    • 爬虫思路之破解红薯网小说
    • 爬取b站视频
    • Xpath选择器
    • MongoDB数据库

    爬取b站视频

    """
    爬取大的视频网站资源的时候,一般都需要下载一些第三方的功能模块来帮助我们爬取
    b站、抖音...
    
    开源:全世界公开 免费使用的
    
    如何快速格式化json格式数据
    https://www.bejson.com/
    
    
    研究每个视频url的特点
    https://www.bilibili.com/video/av73342471?p=1
    https://www.bilibili.com/video/BV1nE411176d?p=2
    https://www.bilibili.com/video/BV1nE411176d?p=3
    https://www.bilibili.com/video/BV1nE411176d?p=4
    """
    1.访问视频链接查看网页源码发现视频的详细信息就在js代码中
    	<script>window.__playinfo__ = {...}</script>
        # 真正表达式
        <script>window.__playinfo__ = (.*?)</script>
     
    2.需要一个整合的工具
    	ffmpeg
    

    爬虫思路之破解知乎登录

    1.知乎是必须登录之后才能访问网站资源的
    2.发送登录查找接口信息及请求体数据格式
    	Request URL: https://www.zhihu.com/api/v3/oauth/sign_in
    3.请求体数据全部都是加密的
    aR79k4U0cT2tXqYq8LPG6vHmxq2pkLnmtbSBDgg9kLtxgeSmhbfGiqX1jbfVoG398LF0gQN0cT2tuqYq8LkMQbwGivwOgUxGw9e0g4e8kCV92vgBzh3qk4R92LkYFhVGwqoVJbCGST2tECx9BLkBEJXmST2tXqYhZUS8eDC8FBtxg0Y080Y0kHU0r0txXqYhyhomogcMUuppkLPyMLtykQrqr7FXr8tyihYqk4R92LkYJwNm8CSMcrU0g72XUBN0B8F0Se9yb8xfnGFqY8tqciU82_tx6_xB1MY0NUe0gw2pk8t9BLfBkvwGUbOYDq3q8Ln8gcgZcUS_iD3ZpvS8Xg9hgqxOcvSMMTYhc4uyoMtxc_2q1RFqr6S0gRo9U9oMzcO1erU0g_xO-GoMBwxMXg9hguoLevwGXwNM3rU0gRtxguFqm0YBrAHqgg2f2Txy0qtq6A98S8Yfo8OBhq28Xg9hHgOGebOBtrS8
    # 这里的请求体肯定是在前端用的js代码加密(前端的逻辑代码只能是js代码)
    4.知乎验证码校验
    	https://www.zhihu.com/api/v3/oauth/captcha?lang=en
        lang=en  验证码使用的是英文
        lang=cn  验证码使用的是中文
       	第一次朝该地址发请求如果返回的结果{"show_captcha":true}那么就表示此次登录需要验证码校验
        如果返回的结果{"show_captcha":false}那么此次登录无需验证码
    5.一般涉及到js加密都会出现一个关键字encrypt
    	全局搜索js文件中含有关键字的js代码 一个个查找
        直到找到return __g._encrypt()代码
        给该行代码加断点查看加密之前的数据格式
      
    6.利用解析库获取数据
    from urllib.parse import unquote_plus,
    """
    unquote_plus  将密文转明文
    urlencoded	  明文转密文
    """
    msg = '''
    client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=%2B8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https%3A%2F%2Fwww.zhihu.com%2Fsignin%3Fnext%3D%252F
    '''
    print(unquote_plus(msg))
    client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=+8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https://www.zhihu.com/signin?next=%2F
        
    7.分析解析之后的数据参数
    client_id      用户id(固定值)
    grant_type     验证方式(固定值)
    timestamp      时间戳*1000,去尾
    source		   (固定值)
    signature	   签名(js加密,变动)
    username	   用户名
    password	   密码
    captcha		   验证码
    lang		   验证码方式(固定值)
    utm_source	   (固定值)
    ref_source	   (固定值)other_https://www.zhihu.com/signin?next=%2F
        
        
    8.加密数据里面还有一个加密项
    	signature(js动态加密)
       	全局搜索signature加密代码得出一下结论
        
        import hmac
    	from hashlib import sha1
     
    9.请求体加密代码执行
    	拷贝请求体加密的代码然后编写完整的破解代码
    	pip install  PyExecJS  # 执行js代码
     
    10.登录的cookie一开始就需要保存 后续做激活
    
    
    为了舒适的结果,眼前的坎坷路程即使再长都是值得的。
  • 相关阅读:
    【智能合约】编写复杂业务场景下的智能合约——可升级的智能合约设计模式(附Demo)
    深入浅出区块链——零知识证明
    centos设置静态IP
    jQuery学习笔记(四):attr()与prop()的区别
    jQuery学习笔记(三):选择器总结
    jQuery学习笔记(二):this相关问题及选择器
    jQuery学习笔记(一):入门
    des解密不完整,前面几位是乱码的解决办法
    Python __init__.py 作用详解
    MySQL for mac使用记录
  • 原文地址:https://www.cnblogs.com/abudrSatan1998/p/13713280.html
Copyright © 2011-2022 走看看