周六,对python知乎爬虫小结一下。
抓包 -- 分析登录过程
使用 fiddler 抓包
使用浏览器抓包
1. 获取登录url
输入账号、密码等,登录网站
post 方式访问url,页面跳转,箭头所指是真实的 登录url
2. 获取登录参数
可以看到 form data 加密了
处理方法
需要解决两个问题:提交了哪些参数;如何加密
1. 首先需要进入 source 面板,找寻相关 js 文件与加密函数;
2. 搜索与加密相关的英文,搜索方法见我的博客《浏览器抓包》,只要相关的函数名没有加密,就能搜到,这里搜索 encrypt;【encrypt:加密】
3. 在浏览器中格式化 js 代码,定位到加密函数,获取行号;【往往可以搜到很多个encrypt,浏览器中只匹配到第一个,所以要拷到编辑器中,搜索定位】
4. 在对应行号设置断点;【注意行号可能不完全相同,在上下几行中找找对应函数】
5. 重新登录,进行调试,抓取登录参数;
加密函数
var b = function(e) {
return__g._encrypt(encodeURIComponent(e))
};
e
"client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password×tamp=1559629752508&source=com.zhihu.web&signature=15317e3484b64449697b285a69a09af8ff23a1af&username=yanshuangwu258%40sina.com&password=6712007&captcha=&lang=en&ref_source=homepage&utm_source="
加密函数 b 传入参数e,先进行 encodeURIComponent,根据经验应该是 编码成 key-value 形式,然后进行加密
先把参数意义搞清楚
client_id=c3cef7c66a1843f8b3a9e6a1e3160e2 客户端id
grant_type=password 授权类型
timestamp=1559629752508 时间戳
source=com.zhihu.web 源地址
signature=15317e3484b64449697b285a69a09af8ff23a1af 签名
username=yanshuangwu258%40sina.com 用户名
password=6712007 密码
captcha= 验证码
lang=en 验证码类型
ref_source=homepage
utm_source=
多试几次,观察参数值是否固定;
经对比,不固定的是 时间戳、签名、验证码;
时间戳就是时间,算是已知的,剩下就要得到签名和验证码了