Python爬虫-尝试使用人工和OCR处理验证码模拟登入

标签: python 验证码 爬虫 cookie
473人阅读 评论(0) 收藏 举报
分类:

此次是我第一次模拟登入,目标站点是知乎。
刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我将cookies删除掉果然就有需要验证码了:

分析-01.png

参考了大多数的意见,可以模拟登入移动端,验证码形式是我们常见的字母数字组合,避开这个点击倒立的验证码形式,然后我就在移动端抓包了,可以拿到验证码图片的包,我们可以请求这个URL拿到每次的验证码:

分析-02.png

这个URL的结构是:https://www.zhihu.com/captcha.gif?r=xxx&type=login
分析-03.png

搜索”

def get_xsrf():
    url='https://www.zhihu.com/signin?next=/'
    html=session.get(url=url,headers=headers).text
    pattern=re.compile('.*?<input type="hidden" name="_xsrf" value="(.*?)"/>', re.S)
    _xsrf=re.search(pattern,html).group(1)
    if _xsrf:
        print('_xsrf获取成功:'+ _xsrf)
        return _xsrf
    else:
        print('_xsrf获取失败')

对于captcha,就是验证码了,在刚开始的时候也提到了,可以请求相应的URL,拿到每次所需的验证码,人工来识别验证码的好处就是准确率高,这里我尝试使用了,人工识别的方法:
验证码图片会下载至项目所在的文件夹,打开图片,输入验证码即可

def get_captcha():
    t=int(time.time()*1000)
    url='https://www.zhihu.com/captcha.gif?r='+str(t)+'&type=login'
    content=session.get(url=url,headers=headers).content
    with open('captcha.jpg','wb') as f:
        f.write(content)
    im=Image.open('captcha.jpg')
    im.show()
    time.sleep(5)
    im.close()
    return input('请输入验证码:')

后面我又尝试使用OCR(Optical Character Recogintion,光学字符识别),所用到的包是pytesseract,看能不能够自动识别,但是显然效果是很差的,在此也记录一下:

def get_captcha():
    t=int(time.time()*1000)
    url='https://www.zhihu.com/captcha.gif?r='+str(t)+'&type=login'
    content=session.get(url=url,headers=headers).content
    with open('captcha.jpg','wb') as f:
        f.write(content)
    im=Image.open('captcha.jpg')             #把彩色图像转化成灰度图像
    gray=im.convert('L')                
    gray.show()                         
    threshold=200                            #二值化处理
    table=[]                                
    for i in range(256):
        if i < threshold:
            table.append(0)
        else:
            table.append(1)
    out=gray.point(table,'1')
    out.show()
    out.save('captcha_thresholded.jpg')
    th=Image.open('captcha_thresholded.jpg')  #使用Tesseract进行图片识别
    print(pytesseract.image_to_string(th))
    return pytesseract.image_to_string(th)

试了几次,OCR识别的结果都是有问题的,结果是这样的:

分析-07.png

查看评论

Python破解有道翻译爬虫

-
  • 1970年01月01日 08:00

python爬虫-->验证码处理

在上一篇博文中,介绍了如何自动化的进行表单交互,但是我们是用手动进行网址注册账号的,然后用这个账号密码进行自动化交互。那么在上一篇博文中为何不去自动化的注册账号呢?因为通常在网站注册账号,需要输入图片...
  • Mr_tyting
  • Mr_tyting
  • 2017-07-11 10:11:53
  • 958

python爬虫解决验证码的思路

如果直接从生成验证码的页面把验证码下载到本地后识别,再构造表单数据发送的话,会有一个验证码同步的问题,即请求了两次验证码,而识别出来的验证码并不是实际需要发送的验证码。有如下几种方法解决。 法1:用s...
  • qq_18698003
  • qq_18698003
  • 2016-06-05 20:52:28
  • 2168

python使用tesseract-ocr完成验证码识别

一、python验证码识别库安装Ubuntu版本:1.tesseract-ocr安装 sudo apt-get install tesseract-ocr2.pytesseract安装 sudo ...
  • a349458532
  • a349458532
  • 2016-05-24 15:00:07
  • 23221

python模拟一个简单的用户登录

前景 思路 主要功能 代码 实验结果 总结 前景 今天学到了一个模块hashlib,通过廖老师的文章,我猛然发现!原来存储在数据库里面的用户名的密码是经过hash算法之后的,而不是...
  • qq_41376740
  • qq_41376740
  • 2018-02-08 19:19:43
  • 278

【Python爬虫7】验证码处理

获得验证码图片 光学字符识别验证码 用API处理复杂验证码 1 9kw打码平台 11 提交验证码 12 请求已提交验证码结果 12与注册功能集成 验证码(CAPTCHA)全称为全自动区分计算机和人类的...
  • u014134180
  • u014134180
  • 2017-02-17 13:15:06
  • 8499

Python爬虫之自动登录与验证码识别

Python爬虫之自动登录与验证码识别在用爬虫爬取网站数据时,有些站点的一些关键数据的获取需要使用账号登录,这里可以使用requests发送登录请求,并用Session对象来自动处理相关Cookie。...
  • tobacco5648
  • tobacco5648
  • 2016-02-06 19:19:21
  • 40558

scrapy+python当你的爬虫遇到验证码处理方式之一

朋友们大家好,今天再开一博说一下自己在学习爬虫练习时遇到的问题及解决办法 1、首先得承认,任何方式的偷盗行为都不在法律的保护范围之内,要是偷自己的东西呢,就另当别论了,douban 还是相当仁义...
  • u011829453
  • u011829453
  • 2017-09-01 11:15:47
  • 3145

Python爬虫实现验证码登录

很多网站为了避免被恶意访问,需要设置验证码登录,避免非人类的访问,Python爬虫实现验证码登录的原理则是先到登录页面将生成的验证码保存下来,然后人为输入后,包装后再POST给服务器,实现验证,这里还...
  • qq_27717921
  • qq_27717921
  • 2016-11-13 15:17:13
  • 7910

爬虫之验证码问题

开始是想着将验证码下载到本地,然后调用软件打开 from PIL import Image img=Image.open(file) img.show() 然后发现直接可以调用matplotlib...
  • sikuquanshu123
  • sikuquanshu123
  • 2016-02-02 12:15:55
  • 329
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 416
    排名: 11万+
    文章存档
    最新评论