爬虫之验证码获取并识别

重装了电脑,误删了以前电脑上写的py文件,都是一点一滴呀。打算重新补一下,还好路飞的作业有,剩下就是自己的一些小练习。

  学爬虫,有一个月了。从元旦期间刚刚开始接触,下载各种环境,软件。再到后来停滞不前,被什么xpath、beautifulsoup给挡路。之后又看了两天数据分析,总之就是静不下来,毫无章法。每天看看这,看看那。

  昨天开始看验证码这块。写了一个cnki验证码

 

  前期准备:安装pytesseract,pip即可

  依赖软件:Tesseract-OCR

  使用过程中会出错的地方:参考https://blog.csdn.net/showgea/article/details/82656515

  

  pytesseract安装后,在python的Lib目录下site-packges下会生成一个pytesseract文件夹,文件夹中找到pytesseract.py,路径为:D:\Python36\Lib\site-packages\pytesseract,使用notepad之类软件打开pytesseract.py,找到如下两行:

  # CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
  tesseract_cmd = 'tesseract'

将tesseract_cmd = 'tesseract'修改为:tesseract_cmd = 'D:/Program Files (x86)/Tesseract-OCR/tesseract.exe'

表示tesseract_cmd配置的是你安装tesseract的绝对路径,这样就能找到tesseract了。修改后保存,再去运行python代码,就可以成功了。

from PIL import Image
import pytesseract
import requests
from lxml import etree

url = 'http://my.cnki.net/Register/CommonRegister.aspx?returnurl=%2f%2fwww.cnki.net%2f'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3143.400 QQBrowser/9.6.11451.400'
}

def get_image():

    response = requests.get(url=url,headers=headers)
    html = etree.HTML(response.text)
    src = html.xpath('//*[@id="checkcode"]//@src')[0]
    img_url = 'http://my.cnki.net/Register/'+src
    # print(img_url)
    img_res = requests.get(img_url,headers = headers)
    # print(img_res.content)
    f= open(r'D:\py\练习\爬虫\验证码\cnki.jpg','wb')
    f.write(img_res.content)

def get_code():
    image = Image.open(r'D:\py\练习\爬虫\验证码\cnki.jpg')
    image = image.convert('L')
    threshold = 150
    table = []
    for i in range(256):
        if i < threshold:
            table.append(0)
        else:
            table.append(1)
    # print(table)
    image = image.point(table,'1')
    # image.show()
    text = pytesseract.image_to_string(image)
    return text

get_image()
print(get_code())

PIL是自带的,这里用了xpath。分两步:获取、识别

找到img的链接,打开写入本地。读取,做一些处理,二值化,识别率还可以。

开心

posted @ 2019-01-31 16:51  CP喜欢晒太阳  阅读(839)  评论(0)    收藏  举报