上一节: Python - 网页抓取基于表单的网站
上一节
下一节: Python 网页抓取使用 Scrapers 进行测试
下一节
Python - 网页抓取处理验证码
简述
在本章中,让我们了解如何执行网页抓取和处理用于测试用户的人或机器人的验证码。
什么是验证码?
验证码的完整形式是Completely Automated Public Turing test to tell Computers and Humans Apart,这清楚地表明这是一个判断用户是不是人的测试。
验证码是一种扭曲的图像,通常不容易被计算机程序检测到,但人类可以设法理解它。大多数网站使用验证码来防止机器人交互。
使用 Python 加载验证码
假设我们要在网站上进行注册,并且有带有 CAPTCHA 的表单,那么在加载 CAPTCHA 图像之前,我们需要了解表单所需的具体信息。借助下一个 Python 脚本,我们可以了解http://example.webscrapping.com 网站上的注册表单的格式要求。
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 = '
href="http://example.webscraping.com/user/register">http://example.webscraping.com/user/register'
ckj = cookielib.CookieJar()
browser = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckj))
html = browser.open(
'
href="http://example.webscraping.com/places/default/user/register?_next"> http://example.webscraping.com/places/default/user/register?_next
).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 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脚本正在使用pillowpython 包并定义了一个用于加载验证码图像的函数。它必须与名为的函数一起使用form_parser()这是在前面的脚本中定义的,用于获取有关注册表单的信息。此脚本将以有用的格式保存 CAPTCHA 图像,该格式可以进一步提取为字符串。
OCR:使用 Python 从图像中提取文本
在以有用的格式加载 CAPTCHA 后,我们可以借助光学字符识别 (OCR) 来提取它,这是一个从图像中提取文本的过程。为此,我们将使用开源 Tesseract OCR 引擎。它可以在以下命令的帮助下安装 -
pip install pytesseract
例子
在这里,我们将扩展上述 Python 脚本,该脚本使用 Pillow Python 包加载验证码,如下所示 -
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)
运行上述脚本后,我们将得到注册表单的验证码作为输出。
上一节: Python - 网页抓取基于表单的网站
上一节
下一节: Python 网页抓取使用 Scrapers 进行测试
下一节
查看笔记 分享笔记
笔记内容:
称呼:
Email:
站点:
分享笔记 重置
分类导航
前端
Ajax 教程
Angular 教程
Aurelia 教程
Bootstrap 教程
ChartJS 教程
CSS 教程
ES6 教程
FontAwesome 教程
HTML 教程
HTML 字符集 教程
HTML 游戏 教程
JavaScript 教程
jQuery 教程
Less 教程
React 教程
Sass 教程
Stylus 教程
TypeScript 教程
Unity 教程
Vue.js 教程
WebAssembly 教程
XAML 教程
颜色 教程
服务端
C# 教程
C++ 教程
COBOL 教程
C语言 教程
Fortran 教程
Go 教程
Groovy 教程
Java 教程
JSP 教程
JVM 教程
Kotlin 教程
Lisp 教程
Lua 教程
Node.js 教程
Pascal 教程
Perl 教程
PHP 教程
Python 教程
Python 3 教程
Ruby 教程
Rust 教程
Scala 教程
Spring 教程
Spring Boot 教程
Spring Cloud 教程
VB.Net 教程
移动端
Android 教程
IOS 教程
Objective-C 教程
React Native 教程
Swift 教程
小程序 教程
数据库
Access 教程
DB2 教程
Mariadb 教程
Memcached 教程
MongoDB 教程
MySQL 教程
Neo4j 教程
PL/SQL 教程
PostgreSQL 教程
Redis 教程
SQL 教程
SQL Server 教程
SQLite 教程
T-SQL 教程
数据格式
Jackson 教程
JSON 教程
SVG 教程
XML 教程
开发工具
ActiveMQ 教程
Ant 教程
Apache HttpClient 教程
Apache POI PPT 教程
AWS 教程
Docker 教程
ElasticSearch 教程
ExpressJS 教程
GIT 教程
GitLab 教程
Google Maps 教程
Gradle 教程
Java NIO 教程
JavaFX 教程
JavaMail 教程
JDBC 教程
jMeter 教程
JPA 教程
jsoup 教程
Junit 教程
KoaJS 教程
Kubernetes 教程
Log4j 教程
Logstash 教程
Lucene 教程
Makefile 教程
Maven 教程
RESTful 教程
Sed 教程
SEO 教程
Servlet 教程
SLF4J 教程
Socket.IO 教程
Struts 教程
SVN 教程
TestNG 教程
UML 教程
UNIX / LINUX 教程
WebSocket 教程
WPF 教程
xStream 教程
区块链 教程
数据处理
Flink 教程
Flume 教程
Hadoop 教程
Hbase 教程
Hive 教程
Kafka 教程
Kibana 教程
MapReduce 教程
MATLAB 教程
MyBatis 教程
Pig 教程
R语言 教程
Solr 教程
Spark 教程
Storm 教程
Zookeeper 教程
大数据分析 教程
数据仓库 教程
数据挖掘 教程
计算机基础
HTTP 教程
IPv4 教程
IPv6 教程
Ubantu 教程
WebServices 教程
嵌入式系统 教程
操作系统 教程
数据结构和算法 教程
汇编语言 教程
物联网 教程
电子电路基础 教程
编译器设计 教程
网站开发 教程
计算机 教程
计算机基础 教程
计算机网络 教程
设计模式 教程
AI
CNTK 教程
Keras 教程
PyTorch 教程
TensorFlow 教程
人工智能 教程
机器学习 教程
Python 技术
Django 教程
Flask 教程
NumPy 教程
Pandas 教程
Pillow 教程
PyGTK 教程
PyQt5 教程
PySpark 教程
pytest 教程
Python -数据科学 教程
Python MySQL 教程
Python 取证 教程
Python 数据结构 教程
Python 文本处理 教程
Python 网络编程 教程
Python 网页抓取 教程
Python 设计模式 教程
RxPY 教程
SciPy 教程
Seaborn 教程
SymPy 教程
wxPython 教程
框架
Laravel 教程
Web 图标Icon 教程
Web2py 教程
WebGL 教程
WebRTC 教程
WordPress 教程
Yii 教程
Zend Framework 教程
SAP
Crystal Reports 教程