爬虫有道翻译接口+图片文字识别

有道爬虫接口
基本思路:接受用户输入,以字符串形式通过爬虫接口连接到有道翻译,把网页反馈结果输出即可。
第一步先踩点,找到相关参数。有道翻译界面,鼠标右键点击审查元素(现在浏览器基本附带这个功能)。像这样输入一句话,找到NETWORK(网络)部分的POST请求(如上图红框部分)。右边消息头我们可以找到网址,我这里是请求网址部分。这是待会要用的爬虫网址。在这里插入图片描述

点击右边的参数部分,可以看到一个字典的数据形式。其中的i键对应的值是我们请求翻译的内容。如图:在这里插入图片描述

关于代理问题:有些网站加入了反爬机制,我们可以用本机的名称取代python,防止被检测出来禁止python访问。消息头下拉就可以找到我们主机的User-Agent.注意使用的时候要完整的代理,如果复制的时候中间有省略号可能会出现错误。
在这里插入图片描述

完整代码

import sys
import urllib.request
import urllib.parse
import json
import pytesseract
from PIL import Image


#图片文字识别,要想识别中文则参数要加入lang='chi_sim'
realize_content=pytesseract.image_to_string(Image.open('F:/文字识别/4.png'),lang='chi_sim')
print('图片识别结果:',realize_content)

#伪装一下user-Agent名称,防止被主机禁止
head={'User-Agent	':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:62.0) Gecko/20100101 Firefox/62.0'}

#上图找到的请求网址,也就是爬虫要访问的网址。如果原来的网址http://fanyi.youdao.com
# /translate_o?smartresult=dict&smartresult=rule请求错误,就把中间的_o删掉。
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

#完整的网站参数部分的字典,i键的值就是我们要输入的翻译内容
date={
'action':	'FY_BY_REALTIME',
'client':	'fanyideskweb',
'doctype':'json',
'from':'AUTO',
'i':realize_content,
'keyfrom':'fanyi.web',
'salt':'1538893285995',
'sign':'88f4c9c260cc8948e53ce19689fbdf8c',
'smartresult':	'dict',
'to':	'AUTO',
'typoResult':	'true',
'version'	:'2.1',
}
#对date进行编码
date=urllib.parse.urlencode(date).encode('UTF-8')

#网络请求返回的结果
req=urllib.request.Request(url,date,head)

#打开网络请求返回的结果
response=urllib.request.urlopen(req)
#把网络返回的请求结果进行read
result=response.read().decode('utf-8')

#翻译返回的结果被json数据结果封装了,需要导入json模块读出翻译的结果
target=json.loads(result)
target_list1=target["translateResult"][0]
target_list1_length=len(target_list1)
print('翻译结果为:',end='')
for i in range(target_list1_length):
    print('%s'% target["translateResult"][0][i]['tgt'])



文字识别图片
例如(电脑中的图片)
在这里插入图片描述

#文字识别图片,Image.open()第一个参数是图片的存放路径。识别返回内容是字符串的形式。
realize_content=pytesseract.image_to_string(Image.open('F:/文字识别/eat.png'),lang='chi_sim')

我把图片识别后的返回值当做用户输入值赋值给date中的i进行翻译。

程序运行识别后的结果和翻译的结果效果如下:
在这里插入图片描述
文字识别要用到pytesseract和pillow库以及安装Tesseract-OCR引擎。我是直接把图片识别后的内容赋值给date中的i,不想文字识别的可以直接用input()函数接受用户自己想输入的内容赋值给i就可以进行翻译。

猜你喜欢

转载自blog.csdn.net/ocean35/article/details/83758814
今日推荐