爬虫之简单验证码处理(代码片段)

ffwen ffwen     2022-11-11     602

关键词:

  机器视觉的一个分支:文字识别,介绍如何用一些 Python库来识别和使用在线图片中的文字。将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition, OCR)。可以实现OCR的底层库并不多,目前很多库都是使用共同的几个底层 OCR 库,或者是在上面 进行定制。在这里我们只重点介绍:Tesseract

  Tesseract 是一个 OCR 库,目前由 Google 赞助(Google 也是一家以 OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源 OCR 系统,除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何 Unicode 字符。

Windows 系统

下载可执行安装文件https://code.google.com/p/tesseract-ocr/downloads/list安装。

Linux 系统

可以通过 apt-get 安装: $sudo apt-get tesseract-ocr

Tesseract 是一个 Python 的命令行工具,不是通过 import 语句导入的库。安装之后,要用 tesseract 命令在 Python 的外面运行,但我们可以通过 pip 安装支持Python 版本的 Tesseract库:

pip install pytesseract

import pytesseract
from PIL import Image

image = Image.open(‘test.jpg‘)
text = pytesseract.image_to_string(image)
print(text)

用 Python 脚本对图片进行清理,利用 PIL 库,我们可以创建一个阈值过滤器来去掉渐变的背景色,只把文字留下来,从而让图片更加清晰,便于 Tesseract 读取:

from PIL import Image
import subprocess

def cleanFile(filePath, newFilePath):
    image = Image.open(filePath)

    # 对图片进行阈值过滤(低于143的置为黑色,否则为白色)
    image = image.point(lambda x: 0 if x < 143 else 255)
    # 重新保存图片
    image.save(newFilePath)

    # 调用系统的tesseract命令对图片进行OCR识别     
    subprocess.call(["tesseract", newFilePath, "output"])

    # 打开文件读取结果
    with open("output.txt", ‘r‘) as f:
        print(f.read())

if __name__ == "__main__":
    cleanFile("text2.png", "text2clean.png")

从网站图片中抓取文字

下面的程序就是从网站图片中抓取文字:首先打开阅读器,收集图片的 URL 链接,然后下载图片,识别图片,最后打印每个图片的文 字。因为这个程序很复杂,利用了前面几章的多个程序片段,所以我增加了一些注释以让 每段代码的目的更加清晰:

import time
from urllib.request import urlretrieve
import subprocess
from selenium import webdriver
#创建新的Selenium driver
driver = webdriver.PhantomJS()

# 用Selenium试试Chrome浏览器:
# driver = webdriver.Chrome()

driver.get("http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200")
# 单击图书预览按钮
driver.find_element_by_id("sitbLogoImg").click()
imageList = set()
# 等待页面加载完成
time.sleep(5)
# 当向右箭头可以点击时,开始翻页
while "pointer" in driver.find_element_by_id("sitbReaderRightPageTurner").get_attribute("style"):
driver.find_element_by_id("sitbReaderRightPageTurner").click()
time.sleep(2)
# 获取已加载的新页面(一次可以加载多个页面,但是重复的页面不能加载到集合中)
pages = driver.find_elements_by_xpath("//div[@class=‘pageImage‘]/div/img")
for page in pages:
image = page.get_attribute("src")
imageList.add(image)
driver.quit()

# 用Tesseract处理我们收集的图片URL链接
for image in sorted(imageList):
# 保存图片
urlretrieve(image, "page.jpg")
p = subprocess.Popen(["tesseract", "page.jpg", "page"], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
f = open("page.txt", "r")
p.wait()
print(f.read())

3-爬虫-模拟登录图片验证码处理(代码片段)

模拟登录验证码的识别线上的打码平台超级鹰url:https://www.chaojiying.com/about.html使用流程:注册:注册一个用户中心的账号登录:用户中心的身份创建一个软件ID:899370下载示例代码云打码动态变化的请求参数动态变化请求参数的... 查看详情

爬虫学习笔记(十七)——字符验证码(代码片段)

文章目录一、认识验证码1.1、概念1.2、作用1.3、类别二、Pillow库2.1、PIL库和Pillow库2.1.1、Pillow库安装2.1.2、PIL与Pillow使用注意2.2、图形基本概念2.2.1、尺寸2.2.2、坐标系统2.2.3、通道2.3、图像获取2.4、获取图像通道三、简单验证码... 查看详情

爬虫学习07.验证码处理(代码片段)

爬虫学习07.验证码处理引入相关的门户网站在进行登录的时候,如果用户连续登录的次数超过3次或者5次的时候,就会在登录页中动态生成验证码。通过验证码达到分流和反爬的效果。今日概要使用云打码平台识别验证码知识点... 查看详情

爬虫案例:尝试对知乎网验证码进行处理(代码片段)

许多流行的内容管理系统即使加了验证码模块,其众所周知的注册页面也经常会遭到网络机器人的垃圾注册。那么,这些网络机器人究,竟是怎么做的呢?既然我们已经,可以成功地识别出保存在电脑上的验证码了... 查看详情

作为一只python爬虫:如何破解滑动验证码(代码片段)

 做爬虫总会遇到各种各样的反爬限制,反爬的第一道防线往往在登录就出现了,为了限制爬虫自动登录,各家使出了浑身解数,所谓道高一尺魔高一丈。今天分享个如何简单处理滑动图片的验证码的案例。类似... 查看详情

验证码之图片验证码(代码片段)

...图片的获取,去掉外周的颜色等进行比较。以下我以一个简单的来说明。这里我利用的是自己画图实现的,即用画图的方式来实现的,这样不在需要什么像第三方的什么凭证才可以使用,这种简单易学,也能达到一定的效果,故... 查看详情

爬虫进阶之分布式爬虫编写(代码片段)

本篇文章将是『如何构建一个分布式爬虫』系列文章的最后一篇,拟从实战角度来介绍如何构建一个稳健的分布式微博爬虫。这里我没敢谈高效,抓过微博数据的同学应该都知道微博的反爬虫能力,也知道微博数据抓取的瓶颈在... 查看详情

python爬虫:bilibili模拟登陆(滑动验证码)项目(代码片段)

文章目录1.为什么要处理滑动验证码2.目标网站3.项目的开发环境4.项目流程介绍5.bilibili模拟登陆-初始化6.bilibili模拟登陆-请求bilibili的登录页面&模拟输入账号密码7.bilibili模拟登陆-获取验证码图片8.bilibili模拟登陆-比较两个验... 查看详情

python爬虫过程中验证码识别的三种解决方案(代码片段)

在Python爬虫过程中,有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是人阅读访问还是机器爬虫。验证码问题看似简单,想做到准确率很高,也是一件不容易的事情。为了更好学习爬虫,... 查看详情

2-13图像处理之水印和验证码(代码片段)

1<?php2/**3*图像拷贝4*图像输出字体5*/67//$im=imagecreatefrompng(‘../image/b.png‘);89//$logo=imagecreatefrompng(‘../image/logo.png‘);1011//把logo图片从xy开始宽度为w高度为h的部分图像拷贝到im图像的xy坐标上12//imagecopy($im,$logo,400,200 查看详情

验证码识别——图形验证码(代码片段)

先找了一个简单的图形验证码进行测试,比如知网,从网页里把验证码下载到本地进行简单的灰度处理和二值化处理,能够提高不少识别正确率验证码:  代码: 1importtesserocr2fromPILimportImage34image=Image.open(‘code.jpg‘)5#灰度... 查看详情

使用pythonpil库实现简单验证码的去噪处理(代码片段)

...将灰度图二值化和去除噪点三个基本过程。这里仅以比较简单的验证码为例,介绍一下如何通过Python的PIL库对图片去噪处理。首先看一下未经处理的验证码图片:对图片处理主要使 查看详情

php使用输入检查,简单验证码和错误报告进行表单处理(代码片段)

查看详情

selenium自动化测试之--验证码处理(代码片段)

...措施的越来越麻烦,甚至出现了12306这种看图识物的无敌验证码,我只能说,我选择死亡。这就衍生出了使用selenium来获取获取cookies。因为经常会出现验证码,导致我们ui自动化测试工作无法更好开展,那么如何处理这种验证码... 查看详情

图片识别之验证码识别

许多网站在进行某些操作前会要求输入验证码以此来抵御爬虫和***。此篇主要讲述如何通过代码来识别一些常见的验证码。以此探究图片识别的过程以及如何避免生成容易被识别的验证码。理论图片识别的过程取样本清洗区分样... 查看详情

selenium&pytesseract模拟登录+验证码识别(代码片段)

验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的.验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的.验证码识别涉及到的知识:人工智能,模式识别,机器视... 查看详情

第二十三节:scrapy爬虫识别验证码图片验证码识别(代码片段)

图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,然后通过一些干扰线的绘制而形成图片验证码。例如:知网的注册就有图片验证码 首先我们需要获取验证码图片,通过开发者工具我们可以得到验证码url链... 查看详情

selenium+crop+chaojiying之登录超级鹰(代码片段)

前言    目前在学习网络爬虫中的验证码识别,今天做了个有趣的项目,用超级鹰来模拟登陆超级鹰。    超级鹰:验证码服务平台,提供验证码识别服务。    selenium:最广泛使用的开源WebUI(用户... 查看详情