爬虫之爬取B站视频及破解知乎登录方法(进阶)

时间:2024-03-05 16:55:01

今日内容概要

  • 爬虫思路之破解知乎登录
  • 爬虫思路之破解红薯网小说
  • 爬取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一开始就需要保存 后续做激活