上篇文章记录了2种分割验证码的方法,此外还有一种叫做”滴水算法”(Drop Fall Algorithm)的方法,但本人智商原因看这个算法看的云里雾里的,所以今天记录滑动验证码的处理吧。网上据说有大神已经破解了滑动验证码的算法,可以不使用selenium来破解,但本人能力不足还是使用笨方法吧。

基础原理很简单,首先点击验证码按钮后的图片是滑动后的完整结果,点击一下滑块后会出现拼图,对这2个分别截图后比较像素值来找出滑动距离,并结合selenium来实现拖拽效果。

阅读全文

今天这篇文章主要记录一下如何切分验证码,用到的主要库就是Pillow和Linux下的图像处理工具GIMP。首先假设一个固定位置和宽度、无粘连、无干扰的例子学习一下如何使用Pillow来切割图片。

使用GIMP打开图片后,按 加号 放大图片,然后点击View->Show Grid来显示网格线:


8.png

其中,每个正方形边长为10像素,所以数字1切割坐标为左20、上20、右40、下70。以此类推可以知道剩下3个数字的切割位置。代码如下:

1
2
3
4
5
6
7
from PIL import Image
p = Image.open("1.png")
# 注意位置顺序为左、上、右、下
cuts = [(20,20,40,70),(60,20,90,70),(100,10,130,60),(140,20,170,50)]
for i,n in enumerate(cuts,1):
temp = p.crop(n) # 调用crop函数进行切割
temp.save("cut%s.png" % i)

切割后得到4张图片:


9.png

那么,如果字符位置不固定怎么办呢?现在假设一种随机位置宽度、无粘连、无干扰线的情况。

阅读全文

写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:

  1. 图像类
  2. 滑动类
  3. 点击类
  4. 语音类

今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。
相应的,验证码识别大体可以分为下面几个步骤:

  1. 灰度处理
  2. 增加对比度(可选)
  3. 二值化
  4. 降噪
  5. 倾斜校正分割字符
  6. 建立训练库
  7. 识别
阅读全文

Python面试题2

发布在 Python

最近面试了几家公司,各行各业的都有,涨了很多见识也发现了自己的技术盲点。这里来一个汇总简单纪录。

行列转换

1
2
3
4
5
6
7
8
9
10
11

已知有一个二维列表(每一行的元素个数相同),写出函数对其行列转换并输出,比如:
a = [[1,1,1,1],
[2,2,2,2]]
输出:
[
[1,2],
[1,2],
[1,2],
[1,2]
]

这里建议笔试时候尽量使用简单清晰的写法,让面试官一眼就能看出答案对错:

1
2
3
4
5
6
7
8
def convert(alist):
result = []
for x in range(len(alist[0])):
tmp = []
for y in range(len(alist)):
tmp.append(alist[y][x])
result.append(tmp)
print result
阅读全文

Django中的Session和Cookie

发布在 Django

简单来说,Cookie和Session都是为了记录用户相关信息的方式,最大的区别就是Cookie在客户端记录而Session在服务端记录内容。

那么Cookie和Session之间的联系是怎么建立的呢?换言之,当服务器接收到一个请求时候,根据什么来判断读取哪个Session的呢?

对于Django默认情况来说,当用户登录后就可以发现Cookie里有一个sessionid的字段,根据这个key就可以取得在服务器端记录的详细内容。如果将这个字段删除,刷新页面就会发现变成未登录状态了。

阅读全文

Pyflame安装小记

发布在 Python

火焰图是一款性能调优工具,可以清晰的看出程序运行瓶颈在哪里。

pyflame则是由Uber开源出来的针对python程序生成火焰图的工具。

这里记录一下安装过程以及遇到的错误。

阅读全文

MySQL索引优化小记

发布在 数据库

有2种数据类型,一种重复率高、一种重复率低,选择这2种类型哪个建立索引好?为什么?

之前确实没考虑过这个问题,但觉得既然是使用空间换时间,数据结构本身重复率那么高索引的作用应该就不大了吧。

后来结束到家查看资料后,发现这个名词叫做”离散率”。对于DBA这个问题应该是最最基础的了。

阅读全文

几道python面试题

发布在 Python

前几天去笔试,这里记录一下遇到的几个编程题,比较基础。

生成斐波那契数列并取前10项

1
2
3
4
5
6
7
8
9
10

def func(m):
n,a,b = 0,1,1
while n < m:
yield a
a,b = b,a+b
n += 1

for one in func(10):
print one

这个可以说是一道常见的简单算法题了,关键点就是理解a,b=b,a+b以及yield的作用。

阅读全文

Fedora25批量转换NEF为JPG

发布在 Linux

NEF格式是尼康相机的RAW拍摄照片格式,在Linux上转换NEF为JPG格式需要安装2个软件:

1
2
yum install ufraw
yum install ImageMagick

安装完成后,可以使用convert DSC_0300.NEF test.jpg命令来进行单张转换,如果需要转换的图片很多的话,建议使用以下命令多进程处理:

1
ls *.NEF | sed 's#.NEF##' | xargs -P8 -I^ convert ^.NEF ^.jpg

评论和分享

作者的图片

Roy

微信公众号:hi-roy


野生程序猿


China