在本章中,让无涯教程了解如何执行网络抓取和处理验证码。
完整的验证码形式是完全自动化的公共图灵测试,可以告诉计算机和人类,清楚地表明,这是确定用户是否为人类的测试。
假设要在网站上进行注册并且有一个包含验证码的表格,那么在加载验证码图像之前,需要了解该表格所需的特定信息。
来源:LearnFk无涯教程网
import lxml.html import urllib.request as urllib2 import pprint import http.cookiejar as cookielib def form_parsing(html): tree=lxml.html.fromstring(html) data={} for e in tree.cssselect('form input'): if e.get('name'): data[e.get('name')]=e.get('value') return data REGISTER_URL='<a target="_blank" rel="nofollow" href="http://example.webscraping.com/user/register">http://example.webscraping.com/user/register'</a> ckj=cookielib.CookieJar() browser=urllib2.build_opener(urllib2.HTTPCookieProcessor(ckj)) html=browser.open( '<a target="_blank" rel="nofollow" href="http://example.webscraping.com/places/default/user/register?_next"> http://example.webscraping.com/places/default/user/register?_next</a>=/places/default/index' ).read() form=form_parsing(html) pprint.pprint(form)
在上面的Python脚本中,无涯教程首先定义了一个函数,该函数将使用lxml python模块来解析表单,然后将打印表单要求,如下所示:
{ '_formkey': '5e306d73-5774-4146-a94e-3541f22c95ab', '_formname': 'register', '_next': '/places/default/index', 'email': '', 'first_name': '', 'last_name': '', 'password': '', 'password_two': '', 'recaptcha_response_field': None }
您可以从上面的输出中检查,除 recpatcha_response_field 外的所有信息都是可以理解和直接的。现在出现的问题是,如何处理这些复杂的信息并下载CAPTCHA。可以通过 Pillow Python库完成如下操作;
Pillow是Python图像库的一个分支,具有处理图像的有用函数。可以在以下命令的帮助下安装-
pip install pillow
在下一个示例中,将使用它来加载CAPTCHA-
from io import BytesIO import lxml.html from PIL import Image def load_captcha(html): tree=lxml.html.fromstring(html) img_data=tree.cssselect('div#recaptcha img')[0].get('src') img_data=img_data.partition(',')[-1] binary_img_data=img_data.decode('base64') file_like=BytesIO(binary_img_data) img=Image.open(file_like) return img
上面的python脚本使用 pillow python包,并定义了一个用于加载CAPTCHA图像的函数。它必须与上一个脚本中定义的名为 form_parser()的函数一起使用,以获取有关注册表格的信息,该脚本将以一种有用的格式保存CAPTCHA图像,该图像可以进一步提取为字符串。
以有用的格式加载CAPTCHA之后,可以借助光学字符识别(OCR)来提取它,该过程是从图像中提取文本的过程。为此,将使用开源的Tesseract OCR引擎。可以在以下命令的帮助下安装-
pip install pytesseract
在这里,将扩展上述Python脚本,该脚本通过使用Pillow Python Package加载了CAPTCHA,如下所示-
import pytesseract img=get_captcha(html) img.save('captcha_original.png') gray=img.convert('L') gray.save('captcha_gray.png') bw=gray.point(lambda x: 0 if x < 1 else 255, '1') bw.save('captcha_thresholded.png')
上面的Python脚本将以黑白模式读取CAPTCHA,这将很容易将其传递给tesseract,如下所示-
pytesseract.image_to_string(bw)
运行上述脚本后,无涯教程将获得注册表格的验证码作为输出。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)