python搜狗验证码,搜狗读取验证码

本文目录一览:

python如何识别验证码

我们首先识别最简单的一种验证码,即图形验证码。这种验证码最早出现,现在也很常见,一般由4位字母或者数字组成。例如,中国知网的注册页面有类似的验证码,页面如下所示:

表单中最后一项就是图形验证码,我们必须完全正确输入图中的字符才可以完成注册。

更多有关验证码的知识,可以参考这些文章:

Python3爬虫进阶:识别图形验证码

Python3爬虫进阶:识别极验滑动验证码

Python3爬虫进阶:识别点触点选验证码

Python3爬虫进阶:识别微博宫格验证码

·本节目标以知网的验证码为例,讲解利用OCR技术识别图形验证码的方法。

·准备工作识别图形验证码需要库tesserocr,以mac安装为例:在mac下,我们首先使用Homebrew安装ImageMagick和tesseract库:    brew install imagemagickbrew install tesseract 接下来再安装tesserocr即可:pip3 install tesserocr pillow这样我们就完成了            tesserocr的安装。

·获取验证码为了便于实验,我们先将验证码的图片保存到本地。打开开发者工具,找到验证码元素。验证码元素是一张图片,它的ser属    性是CheckCode.aspk。所以我们直接打开如下链接就可以看到一个验证码,右键保存即可,将其命名为code.jpg:

这样我们就得到一张验证码图片,以供测试识别使用。

相关推荐:《Python教程》

识别测试

接下来新建一个项目,将验证码图片放到项目根目录下,用tesserocr库识别该验证码,代码如下所示:

这里我们新建了一个Image对戏那个,调用了tesserocr的image_to_text( )方法。传入该Image对象即可完成识别,实现过程非常简单,结果如下:

我们可以看到,识别的结果和实际结果有偏差,这是因为验证码内的多余线条干扰了图片的识别。

另外,tesserocr还有一个更加简单的方法,这个方法可以直接将图片文件转为字符串,代码如下:

不过这种方法的识别效果不如上一种的好。

验证码处理

对于上面的图片,我们可以看到其实并没有完全识别正确,所以我们需要对图像作进一步的处理,如灰度转换、二值化等操作。

我们可以利用Image对象的convert( )方法参数传入L,即可将图片转化为灰度图像,代码如下:

传入1即可将图片进行二值化处理,如下所示:

我们还可以指定二值化的阈值。上面的方法采用的是默认阈值127。不过我们不能直接转化原图,要将原图先转化为灰度图像,然后再指定二值化阈值,代码如下:

在这里,变量threshold代表二值化阈值,阈值设置为160,之后我们来看看我们的结果:

我们可以看到现在的二维码就比较方便我们进行识别了;那么对于一些有干扰的图片,我们做一些灰度和二值化处理,这会提高图片识别的正确率。

如何利用Python做简单的验证码识别

先是获取验证码样本。。。我存了大概500个。

用dia测了测每个字之间的间距,直接用PIL开始切。

from PIL import Image

for j in range(0,500):

f=Image.open(“../test{}.jpg”.format(j))

for i in range(0,4):

f.crop((20+20*i,0,40+20*i,40)).save(“test{0}-{1}.jpg”.format(j,i+1))

上面一段脚本的意思是把jpg切成四个小块然后保存

之后就是二值化啦。

def TotallyShit(im):

x,y=im.size

mmltilist=list()

for i in range(x):

for j in range(y):

if im.getpixel((i,j))200:

mmltilist.append(1)

else:

mmltilist.append(0)

return mmltilist

咳咳,不要在意函数的名字。上面的一段代码的意思是遍历图片的每个像素点,颜色数值小于200的用1表示,其他的用0表示。

其中的im代表的是Image.open()类型。

切好的图片长这样的。

只能说这样切的图片还是很粗糙,很僵硬。

下面就是分类啦。

把0-9,“+”,”-“的图片挑好并放在不同的文件夹里面,这里就是纯体力活了。

再之后就是模型建立了。

这里我试了自己写的还有sklearn svm和sklearn neural_network。发现最后一个的识别正确率高的多。不知道是不是我样本问题QAQ。

下面是模型建立的代码

from sklearn.neural_network import MLPClassifier

import numpy as np

def clf():

clf=MLPClassifier()

mmltilist=list()

X=list()

for i in range(0,12):

for j in os.listdir(“douplings/douplings-{}”.format(i)):

mmltilist.append(TotallyShit(Image.open(“douplings/douplings-{0}/{1}”.format(i,j)).convert(“L”)))

X.append(i)

clf.fit(mmltilist,X)

return clf

大概的意思是从图片源中读取图片和label然后放到模型中去跑吧。

之后便是图像匹配啦。

def get_captcha(self):

with open(“test.jpg”,”wb”) as f:

f.write(self.session.get(self.live_captcha_url).content)

gim=Image.open(“test.jpg”).convert(“L”)

recognize_list=list()

for i in range(0,4):

part=TotallyShit(gim.crop((20+20*i,0,40+20*i,40)))

np_part_array=np.array(part).reshape(1,-1)

predict_num=int(self.clf.predict(np_part_array)[0])

if predict_num==11:

recognize_list.append(“+”)

elif predict_num==10:

recognize_list.append(“-“)

else:

recognize_list.append(str(predict_num))

return ”.join(recognize_list)

最后eval一下识别出来的字符串就得出结果了。。

顺便提一句现在的bilibili登陆改成rsa加密了,麻蛋,以前的脚本全部作废,心好痛。

登陆的代码。

import time

import requests

import rsa

r=requests.session()

data=r.get(“act=getkey_=”+str(int(time.time()*1000))).json()

pub_key=rsa.PublicKey.load_pkcs1_openssl_pem(data[‘key’])

payload = {

‘keep’: 1,

‘captcha’: ”,

‘userid’: “youruserid”,

‘pwd’: b64encode(rsa.encrypt((data[‘hash’] +”yourpassword”).encode(), pub_key)).decode(),

}

r.post(“”,data=payload)

python 爬虫,关于验证码的问题。输入验证码才能搜索。

#给你个例子参考 验证码请求一次就变了

#!/usr/bin/python  

#coding=utf-8  

import requests

import urllib  

import urllib2,hashlib,md5

from BeautifulSoup import BeautifulSoup

import cookielib

def _md5(password):

    md5 = hashlib.md5() 

    md5.update(str.encode(password))

    psw = md5.hexdigest()

    return psw

url = ”

req = urllib2.Request(url)

res_data = urllib2.urlopen(req)

res = res_data.read()

output_file = open(‘1.jpg’, ‘wb’)  

output_file.writelines(res)  

output_file.close()

verifycode =  res_data.headers[‘Set-Cookie’].split(‘;’)[0]

verifycode = verifycode.replace(‘verifycode=’,”)

filename = res_data.headers[‘Content-disposition’].split(‘;’)[1].strip()

exec(filename)

cookiejar = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))

vidcode= raw_input(u”请输入验证码(在本路径 1.jpg): “) 

data = {‘user_login’:”lovesword85@yeah.net”,

        ‘isMd5’:”1″,

        ‘user_pwd’:_md5(‘love123456’),

        ‘verifycode’:vidcode,

        ‘url’:””}

url = ”

data = urllib.urlencode(data)

headers = {‘Content-Type’: ‘application/x-www-form-urlencoded’, ‘X-Requested-With’: ‘XMLHttpRequest’, ‘Cookie’: ‘verifycode={0};’.format(verifycode)}

request = urllib2.Request(url,data,headers)

response = opener.open(request)

print ‘——-result————-‘

print response.read()

print ‘——-headers————-‘

print response.headers

print ‘——-cookies————-‘

for cookie in cookiejar:

    print cookie

原创文章,作者:CHOX,如若转载,请注明出处:https://www.506064.com/n/143004.html

(0)
CHOXCHOX
上一篇 2024-10-14
下一篇 2024-10-04

相关推荐

  • Python贪吃蛇代码详解

    一、Python贪吃蛇代码总结 import pygame,time,random black=(0,0,0) #定义黑色 white=(255,255,255) #定义白色 re…

    编程 2024-10-04
  • 进程状态转换图

    一、进程状态转换基础 进程是操作系统调度的基本单位,而进程状态则是描述进程执行过程中状态的基本概念。进程在其生命周期中会处于不同的状态,包括新建态、就绪态、运行态、阻塞态和终止态。…

    编程 2024-10-04
  • Grafana Alert详解

    一、Grafana Alert概述 Grafana Alert是Grafana软件内置的告警功能,在指定的数据源实时监控数据时,通过设置阈值,当监测到的数据达到或超过阈值时,Gra…

    编程 2024-10-03
  • php论坛毕业设计论文,php和mysql网站毕业设计

    本文目录一览: 1、基于java jsp asp php vb安卓系统毕业设计与实现论文源码下载? 2、php论文选题依据怎么写 3、php论坛(毕业设计要用的) 4、论文毕业设计…

    编程 2024-10-11
  • Python工程师:如何使用UUID生成唯一标识符

    介绍 在现代的计算机系统中,唯一标识符用于标识一个对象或实体。通常,唯一标识符用于识别数据库表中的行,文件系统中的文件或目录以及网络中的客户端或服务器。在Python中,一个常见的…

    编程 2024-10-04
  • Apache Knox:简化企业级Hadoop集群安全接入的解决方案

    一、Apache Knox简介 Apache Knox是一个轻量级、开放源代码、可扩展和可配置的网关,它提供了一个单一的接入点,用于与企业级Hadoop集群进行通信。 Apache…

    编程 2024-10-04
  • php中获取jsfunction的值,php获取js变量值

    本文目录一览: 1、如何用PHP获取JS里函数的值? (不用ajax的话) 2、PHP如何调用JS函数并获取其返回的数据? 3、php变量如何得到js函数的返回值 如何用PHP获取…

    编程 2024-10-03
  • math.roundphp的简单介绍

    本文目录一览: 1、请教为何从AJAX传递的数据,PHP可以收到并显示正常,但对比正常数值或字符一直错误呢 2、php 计算经纬度之间相差多少公里 3、php在网页里使用倒计时的代…

    编程 2024-10-04
  • Python四舍五入详解

    一、Python四舍五入取整函数 在Python中,我们可以使用round()函数进行四舍五入操作,该函数需要两个参数:要进行操作的数字和小数点后保留的位数。 num = 3.14…

    编程 2024-10-04
  • Python自然语言处理利器之分词器实现

    一、什么是分词器 分词器是自然语言处理(NLP)中的一项基本任务,即将文本分割成有意义的单元,例如语句中的词语或单词。在中文中,分词任务尤为重要,因为中文中没有明确的单词边界。分词…

    编程 2024-10-04

发表回复

登录后才能评论