开发手册 欢迎您!
软件开发者资料库

Python Web Scraping - 处理CAPTCHA

Python Web Scraping处理CAPTCHA - 从基本到高级概念的简单简单步骤学习Python Web Scraping,其中包括简介,Python入门,用于Web Scraping的Python模块,Web Scraping的合法性,数据提取,数据处理,处理图像和视频,处理文本,刮动态网站,基于刮痧表格的网站,处理CAPTCHA,使用刮板进行测试。

在本章中,让我们了解如何执行Web抓取和处理CAPTCHA,用于测试用户的人或机器人.

什么是CAPTCHA?

CAPTCHA的完整形式是完全自动化的公共图灵测试,以告诉计算机和人类,这清楚地表明它是一个测试,以确定用户是否是人.

CAPTCHA是一个扭曲的图像,通常不容易通过计算机程序检测到,但人类可以以某种方式设法理解它.大多数网站使用CAPTCHA来防止僵尸程序进行交互.

用Python加载CAPTCHA

假设我们想在网站上进行注册并且有使用CAPTCHA表格,然后在加载CAPTCHA图像之前,我们需要知道表格所需的具体信息.在下一个Python脚本的帮助下,我们可以在名为 http:/的网站上了解注册表单的表单要求/example.webscrapping.com.

import lxml.htmlimport urllib.request as urllib2import pprintimport http.cookiejar as cookielibdef 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 dataREGISTER_URL = 'http://example.webscraping.com/user/register'ckj = cookielib.CookieJar()browser = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckj))html = browser.open(   '      http://example.webscraping.com/places/default/user/register?_next = /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.它可以在枕头Python库的帮助下完成,如下所示;

Pillow Python包

枕头是Python图像库的一个分支,有用用于处理图像的功能.它可以在以下命令和减号的帮助下安装;

  pip install pillow

在下一个例子中,我们将使用它从io import BytesIO
import lxml加载CAPTCHA :

from io import BytesIOimport lxml.htmlfrom PIL import Imagedef 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脚本正在使用枕头 python包并定义一个加载CAPTCHA图像的函数.它必须与前一个脚本中定义的名为 form_parser()的函数一起使用,以获取有关注册表单的信息.此脚本将以有用的格式保存CAPTCHA图像,该格式可进一步提取为字符串.

OCR:使用Python从图像中提取文本

之后以有用的格式加载CAPTCHA,我们可以借助光学字符识别(OCR)提取它,这是一个从图像中提取文本的过程.为此,我们将使用开源Tesseract OCR引擎.它可以在以下命令和减号的帮助下安装;

  pip install pytesseract

示例

这里我们将扩展上面的Python脚本,它使用Pillow Python Package加载CAPTCHA,如下 :

import pytesseractimg = 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)

运行上面的脚本之后我们将获得注册表的CAPTCHA作为输出.