python爬虫
此文章大致需要观看十分钟
Python作为现阶段最流行的语言,对于网络的爬取和海量数据的分析,python更胜一筹。
PyOCR是一个用于python的光学字符识别(OCR)工具包装器。也就是说,它有助于使用Python程序中的OCR工具。
- 安装:pip install pyocr
- 安装PIL:pip install Pillow
PIL主要用于打开图片以及一些处理
此外最重要需要安装OCR引擎,官网原文:PyOCR可以用作google的Tesseract-OCR或Cuneiform 的包装器 。它可以读取Pillow支持的所有图像类型 ,包括jpeg,png,gif,bmp,tiff和其他。它还支持边界框数据。
Tesseract-OCR安装:
安装地址为:Tesseract-OCR安装地址,下载后直接安装即可。
如果不是做英文的图文识别,还需要下载其他语言的识别包:
识别包
简体字识别包:简体字识别包地址
繁体字识别包:繁体字识别包地址
1、PIL应用
from PIL import Image
from pyocr import tesseract
# 使用PIL打开图片
im = Image.open('pic.png')
# OCR识别
code = tesseract.image_to_string(im)
print(code)
2、图片转换
from PIL import Image
from pyocr import tesseract
pic_list = ['pic1.png','pic2.png']
for i in pic_list:
im = Image.open(i)
im = im.convert('L')# 图片转换为灰色图像
# 保存转换后的图片
im.save("temp.png")
code = tesseract.image_to_string(im)
print(code)
3、云打码
import json
import time
import requests
class YDMHttp:
apiurl = 'http://api.yundama.com/api.php'
username = ''
password = ''
appid = '4055'
appkey = 'c5e26d1a207df586d7aaec21522dd446'
def __init__(self, name, passwd, app_id, app_key):
self.username = name
self.password = passwd
self.appid = str(app_id)
self.appkey = app_key
def request(self, fields, files=[]):
response = self.post_url(self.apiurl, fields, files)
response = json.loads(response)
return response
def balance(self):
data = {
'method': 'balance',
'username': self.username,
'password': self.password,
'appid': self.appid,
'appkey': self.appkey
}
response = self.request(data)
if response:
if response['ret'] and response['ret'] < 0:
return response['ret']
else:
return response['balance']
else:
return -9001
def login(self):
data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey}
response = self.request(data)
if response:
if response['ret'] and response['ret'] < 0:
return response['ret']
else:
return response['uid']
else:
return -9001
def upload(self, filename, codetype, timeout):
data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
file = {'file': filename}
response = self.request(data, file)
if response:
if response['ret'] and response['ret'] < 0:
return response['ret']
else:
return response['cid']
else:
return -9001
def result(self, cid):
data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey, 'cid': str(cid)}
response = self.request(data)
return response and response['text'] or ''
def decode(self, file_name, code_type, time_out):
cid = self.upload(file_name, code_type, time_out)
if cid > 0:
for i in range(0, time_out):
result = self.result(cid)
if result != '':
return cid, result
else:
time.sleep(1)
return -3003, ''
else:
return cid, ''
def post_url(self, url, fields, files=[]):
for key in files:
files[key] = open(files[key], 'rb')
res = requests.post(url, files=files, data=fields)
return res.text
def code_verificate(name, passwd, file_name, app_id=4055, app_key='c5e26d1a207df586d7aaec21522dd446',
code_type=1005, time_out=60):
"""
:param name: 云打码注册用户名,这是普通用户注册,而非开发者用户注册名
:param passwd: 用户密码
:param file_name: 需要识别的图片名
:param app_id: 软件ID,这里默认是填的我的,如果需要,可以自行注册一个开发者账号,填自己的。
软件开发者会有少额提成,希望大家支持weibospider的发展(提成的20%会给celery项目以支持其发展)
:param app_key: 软件key,这里默认是填的我的,如果需要,可以自行注册一个开发者账号,填自己的
:param code_type: 1005表示五位字符验证码。价格和验证码类别,详细请看http://www.yundama.com/price.html
:param time_out: 超时时间
:return: 验证码结果
"""
yundama_obj = YDMHttp(name, passwd, app_id, app_key)
cur_uid = yundama_obj.login()
print('uid: %s' % cur_uid)
rest = yundama_obj.balance()
print('balance: %s' % rest)
# 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
cid, result = yundama_obj.decode(file_name, code_type, time_out)
print('cid: %s, result: %s' % (cid, result))
return result
if __name__ == '__main__':
# 云打码注册的登录用户名(通过用户注册)
username = 'xxx'
# 登录密码
password = 'xxx'
rs = code_verificate(username, password, 'pincode.png')