上一篇文章是爬取了12306的車次信息勃救,那么還有登錄碍讨,購票等等。
這里一步一步的文章來學(xué)習(xí)登錄蒙秒,圖片識別勃黍,驗(yàn)證碼等技術(shù)。不斷學(xué)習(xí)中晕讲。最近太忙覆获,都沒有搞py,有時(shí)間就弄一下马澈,歡迎簡書交流。
1. 安裝py庫
pytesseract弄息,詳細(xì)使用說明
pytesseract 0.1.7
PIL圖片常用庫
安裝
pip install pytesseract
pip install pillow
查看安裝之后的庫
pip freeze
2. 使用pytesseract庫
首先進(jìn)入pytesseract網(wǎng)頁查看說明和使用例子.
pytesseract截圖
在使用例子中痊班,做了詳細(xì)說明:
- 需要使用一個(gè)Tesseract-OCR Engine的東西來做識別(第一個(gè)紅圈)。
- 需要找到Tesseract-OCR Engine來做識別(第一個(gè)方框)
- 需要識別的文字語言包(第二個(gè)方框)
3. 安裝Tesseract-OCR Engine摹量,語言包
- 點(diǎn)擊上圖紅圈中的Google's Tesseract-OCR Engine進(jìn)入pytesseract的github中涤伐,向下翻找到installing Tesseract
tesseract github.png - Install Tesseract via pre-built binary package 進(jìn)入,該頁面詳細(xì)記錄了安裝linux ,mac os ,window的安裝包或者源碼缨称。對應(yīng)下載安裝即可凝果。
-
我使用window系統(tǒng),所以下載即可睦尽。在下圖中說明了下載位置器净,語言包等,最重要的是需要配置環(huán)境變量当凡。但是發(fā)現(xiàn)配置了環(huán)境變量成功掌动,但是在使用過程中還是指定了tesseract引擎的位置。不然就報(bào)錯(cuò)宁玫。
window系統(tǒng)說明粗恢,下載位置 - 在w中就是下一步安裝即可,此次安裝語言包我是在安裝的時(shí)候下載欧瘪,選擇簡體中文就可以咯眷射。
4. 代碼實(shí)戰(zhàn)
到了這里,所有的準(zhǔn)備工作和代碼其實(shí)都可以說是編寫完成了的佛掖,因?yàn)樵趐ytesseract的樣例中就已經(jīng)寫的很清楚了妖碉。下面我貼上我的代碼就行。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "雷洪飛"
"""
利用google pytesseract做文字識別芥被,目的是為了做12306的圖片校驗(yàn)欧宜。
"""
try:
import Image
import ImageEnhance
except ImportError:
from PIL import Image, ImageEnhance
import pytesseract
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def get_title_pic():
# 讀取圖片
image = Image.open("image/code.png")
# image.convert("L")
box = (116, 0, 180, 30)
t = image.crop(box)
t.save("image/temp_title.png")
def get_title_text():
base_img_url = "image/temp_title.png"
image = Image.open(base_img_url)
ImageEnhance.Contrast(image).enhance(3.0).convert("L").save(base_img_url)
really_image = Image.open(base_img_url)
# 配置tesseract 引擎位置
pytesseract.pytesseract.tesseract_cmd = 'K:\Program Files\Tesseract-OCR\\tesseract.exe'
# 配置語言包
tessdata_dir_config = '--tessdata-dir "K:\\Program Files\\Tesseract-OCR\\tessdata"'
# 使用pytesseract文字識別
return pytesseract.image_to_string(really_image, lang='chi_sim', config=tessdata_dir_config)
def get_picture(url):
headers = {
"User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
response = requests.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if response.status_code == 200:
with open("./image/code.png", "wb") as f:
f.write(response.content)
print("圖片下載成功")
return True
else:
get_picture(url)
if __name__ == "__main__":
url = "https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.6523880813900003"
# 下載圖片
get_picture(url)
# 得到圖片的標(biāo)題
get_title_pic()
# 獲取標(biāo)題文字
text = get_title_text()
print("識別結(jié)果:" + text)
6. 結(jié)果展示
對于識別12306的標(biāo)題,我是很不滿意的拴魄,只能識別很簡單的字冗茸,復(fù)雜的,字體很傾斜的都基本認(rèn)不出來匹中,效率太低了夏漱。
12306驗(yàn)證碼圖片
識別結(jié)果
這種識別率太低,而且還很多都不能識別顶捷。
我也不知道這個(gè)到底行不行了挂绰。
各位要是有好的識別方法,歡迎下方留言交流服赎。希望找出一種識別率很高的出來葵蒂。不然這個(gè)驗(yàn)證碼基本就gg了交播。