首页 > 代码库 > 爬虫验证码
爬虫验证码
我现在使用 phantomJS 截图,然后裁剪得到验证码,再通过Python光学识别获取验证码。
这个过程中遇到 phantomJS 截图大小不一致的问题,我本地的和服务器的图片,验证码的位置不一致。没办法,只好把服务器上的图片 scp 下来,然后更改像素位置。
为什么不直接下载图片下来呢?
每次点击图片,图片都会变化。应该是要将 cookie 和验证码一起提交上去。要验证这个观点,我决定使用 Charles 抓包看这些请求的顺序,并更改 cookie 看下有什么变化。验证码的思路是不是这样的:
给定一个 Cookie: JSESSIONID=031BC3B941D43115B95924C504662637; 然后每次请求验证码,将这个 cookie 与验证码对应起来,如果多次请求,那么验证码以最近的为准,即新验证码会覆盖旧验证码。
有一个网站验证码地址是这样的,刚打开登录页,验证码地址是
/traffic_web/kaptcha.jpg
重发请求 `/traffic_web/kaptcha.jpg`,验证码图片一直会变。应该是后端随机选择一张图片,然后与 cookie 绑定,再返回给客户端。这样的图片我们要怎么下载呢?应该是以当前的 cookie 访问 `/traffic_web/kaptcha.jpg` 并下载图片,再登录,整个过程中 cookie 应该是同一个。
因为一开始图方便就是用了 PhantomJS,大开大合。那现在这种情况要怎么处理呢?使用 session_request,cookie 从 phantomjs 中读取。我做的就是把截图变为下载图片,减少不稳定性。
试了一下,成功登陆。下面是我的代码:
import requests import shutil headers = {‘Cookie‘: ‘gsScrollPos=; JSESSIONID=54BE9AF60A0F98B10C0D10F195EAA4F3‘} # 你们拿别的 url 去试一下,我这个是工作中用到的,不方便公开 url="http://url_to_kaptcha.jpg" def f():
# 储存图片到本地 来源 http://stackoverflow.com/questions/13137817/how-to-download-image-using-requests response = session_request.get(url, headers=headers, stream=True) with open(‘img.png‘, ‘wb‘) as out_file: shutil.copyfileobj(response.raw, out_file) del response
f()
还可以扩展的是
- 使用 GitHub 上别人做好的识别验证码的库,对图片做修建。
- 抓取大量验证码图片,使用机器学习提高识别率
我现在因为可以让对方不封 IP,所以也没动力去提高验证码识别率,使用Python的OCR,不做任何配置,只在 Python 代码中检验识别后的验证码去除空格的位数是否合适,一般最多识别10次就能成功登陆。
爬虫验证码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。