有道爬虫接口
基本思路:接受用户输入,以字符串形式通过爬虫接口连接到有道翻译,把网页反馈结果输出即可。
第一步先踩点,找到相关参数。有道翻译界面,鼠标右键点击审查元素(现在浏览器基本附带这个功能)。像这样输入一句话,找到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就可以进行翻译。