Python爬虫 - 处理验证码

Python爬虫 - 处理验证码 首页 / 网络爬虫入门教程 / Python爬虫 - 处理验证码

在本章中,让无涯教程了解如何执行网络抓取和处理验证码。

什么是验证码?

完整的验证码形式是完全自动化的公共图灵测试,可以告诉计算机和人类,清楚地表明,这是确定用户是否为人类的测试。

加载CAPTCHA

假设要在网站上进行注册并且有一个包含验证码的表格,那么在加载验证码图像之前,需要了解该表格所需的特定信息。

链接:https://www.learnfk.comhttps://www.learnfk.com/python-web-scraping/python-web-scraping-processing-captcha.html

来源: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 软件包

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图像,该图像可以进一步提取为字符串。

OCR提取文字

以有用的格式加载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)

运行上述脚本后,无涯教程将获得注册表格的验证码作为输出。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

互联网人的英语私教课 -〔陈亦峰〕

手机摄影 -〔@随你们去〕

MySQL 必知必会 -〔朱晓峰〕

爆款文案修炼手册 -〔乐剑峰〕

如何落地业务建模 -〔徐昊〕

李智慧 · 高并发架构实战课 -〔李智慧〕

Go进阶 · 分布式爬虫实战 -〔郑建勋〕

运维监控系统实战笔记 -〔秦晓辉〕

Rust 语言从入门到实战 -〔唐刚〕

好记忆不如烂笔头。留下您的足迹吧 :)