python 爬虫 芝士圈留学20万次访问 验证码破解流程(附代码)

4 篇文章 0 订阅
2 篇文章 0 订阅

python 芝士圈留学 验证码破解 每分钟1万+数据爬虫 python

工作需求 我需要将芝士留学圈的所有案例和页面详情进行抓取,其中没有api接口,所以我们只能去获取页面数据html 然后用xpath分析,这种简单的我就不说了。当我们进行爬取的时候我们会遇到 每100页左右,会需要验证码。

对于验证这点,有些爬虫经验的人会知道,验证码的出现 无非是 因为你的ip或者headers出现了多次访问导致的。下面我们就进行破解

请添加图片描述

7万+数据 3000多页数据访问 ,详情页面7万次访问 页面4000次访问。如果每100次验证一次。根本不可能

出现验证码

请添加图片描述

看到验证码,我们要先从后到前的流程 这样才能流程通起来。

对了,做验证码破解一定要保留日志,不然看不到整个页面流程会自动刷新,
请添加图片描述

找到了这个post请求,你会发现在出现验证的时候会有个同样的url但是是get请求。好的整个逻辑通了。
请添加图片描述
这post请求有2个参数 一个是csrf 这如果你去js中找 会发现是个随机值,所以我们固定就好了。
后面的RequestVerifyForm[verifyCode]是验证的值。
那我们先模拟一次解码请求。当你把页面刷新成验证码状态。然后进行这个请求
下面展示一些 代码片

import requests
rq = requests.session()
#headers 和cookies用自己的就好了
params = {
        'return': '/offers?page=1271',
    }

 data = {
       '_csrf': 'oJSRwrOZF-ZwSmQU9bzzGFfXwIhIiVc1mLaBvRZOQiXGo6G4hc0gjSUSIkWQ3bx5GpW57wrdPUPb39XQLiMAVA==',
       'RequestVerifyForm[verifyCode]':'kal',
   }
# 解密
response = rq.post('https://www.zhishiq.com/verify-request', params=params, cookies=cookies, headers=headers, data=data)
print(response.status_code)

这样你发现你的cookie和ip 又可以进行页面抓取了。说明成功了。
再向前面推导:
1.验证码图片来源?
2.验证码如何识别?
现在我们解决第一个发现验证码图片的请求
请添加图片描述

那后面的参数 66161529989598.70892132,是在’https://www.zhishiq.com/verify-request’ 中的 get请求的html中 那这样问题就简单啦
附带代码。对了切记1.在请求验证码图片的程序中 一定要用get获取’https://www.zhishiq.com/verify-request’这个网址的headers和cookies!!切记不然出现的验证码图片就算你识别了也不能是真正意义上的破解
下面展示一些 内联代码片

params = {
        'return': '/offers?page=1271',
    }
response_id = rq.get('https://www.zhishiq.com/verify-request', params=params, cookies=cookies_1, headers=headers_1)
text = response_id.text
 # print(text)
 p = re.findall('src="/site/captcha\\?v=(.*?)" alt',text)
 print(p[0])
 #下载图片
 response_png = rq.get('https://www.zhishiq.com/site/captcha?v='+str(p[0]),headers=headers_1,cookies=cookies_1).content
 with open('captcha.jpg', 'wb') as f:
     f.write(response_png)
 # 第三方
 api_post_url = "http://www.bingtop.com/ocr/upload/"
 img_url = r'captcha.jpg'
 with open(img_url,'rb') as pic_file:
     img64=base64.b64encode(pic_file.read())
 params_jm = {
     "username": "%s" % '*******',
     "password": "%s" % '********,
     "captchaData": img64,
     "captchaType": 1001
 }
 response = requests.post(api_post_url, data=params_jm)
 dictdata=json.loads(response.text)
 print(dictdata)
 recognition = dictdata['data']['recognition']
 print(recognition)
 data = {
     '_csrf': 'oJSRwrOZF-ZwSmQU9bzzGFfXwIhIiVc1mLaBvRZOQiXGo6G4hc0gjSUSIkWQ3bx5GpW57wrdPUPb39XQLiMAVA==',
     'RequestVerifyForm[verifyCode]':recognition,
 }
 # 解密
 response = rq.post('https://www.zhishiq.com/verify-request', params=params, cookies=cookies, headers=headers, data=data)
 print(response.status_code)

headers和cookie一定要对应好,用自己的headers和cookie就可以啦!!验证码识别用第三方大码平台就好了

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值