用户:wrmdcxy查看:49 回复:17 评论:49 创建时间:2020-02-09T14:48:53
说到翻译,小伙伴们一般都会去查翻译词典,或上网查吧。但是如果你要在Python中去实现翻译,事情就没那么简单了。是的,Python现在已经是有翻译模块了,你可以去下载,网址:https://pypi.org/project/translate/。
比如:
# encoding: utf-8
from translate import Translator
# 以下是将简单句子从英语翻译中文
translator= Translator(to_lang="chinese")
translation = translator.translate("Good night!")
print translation
# 在任何两种语言之间,中文翻译成英文
translator= Translator(from_lang="chinese",to_lang="english")
translation = translator.translate("我想你")
print translation
=>D:\Python27\python.exe F:/PycharmProjects/tom/文本翻译功能.py
晚安!
I missed you.
Process finished with exit code 0
呵呵,是挺喵!
网站全貌:
额……看不懂……我可是英文盲…………

但是,你也应该高兴,因为我们不用创建一个云数据词库
但是你选择不下载的话………………词库…………
啊,不要想这些了!其实我们还有另一种办法……那就是——
当当当当…… 爬虫
:啥?爬虫?
没错,就是爬虫!
:为什么?爬虫跟翻译有什么关系?
当然有,现在的浏览器都有一个翻译功能吧,就是没有,也有一些在线翻译网站吧。。。

所以呢,我们只需要向翻译网站发送一个POST请求(GET请求也没关系啦,关键看你选哪个翻译网站)然后根据请求找到我们需要的东西就好了。
:原来如此
好了,废话不说,开始吧
第一步:最熟悉的,导入模块,这个我不多说了,不就是URLlib和requst吗(requsts也行)
噢还有正则表达式(re)
第二步:找到网址,并检查是否有需要的信息。
这个嘛……我直接用360的英文啦
然后按下F12,选择Hello
然后看看网址
https://en.so.com/s?q=%E4%BD%A0%E5%A5%BD&src=srp&fr=tab_www
注意红色部分,这是“你好”编码之后的东西。
所以,敲代码:
a=request.quote('你好').encode(encoding='utf-8')
顺带个User-Agent:
headers={'User-Agent': '''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KH喵L, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201'''}
这是QQ浏览器的。
我们总结一下,想发送请求,先要搞到网址,而上面的网址中我标了红色的部分就是要翻译的文字,其它都是一样的,而我们刚刚把你好编码了,并赋值给a,于是:
req = request.Request(r'https://en.so.com/sq='+str(a)+'&src=srp&fr=tab_www', headers=headers)
这就是请求头
第三步,我们发送请求,获取响应信息
resp = request.urlopen(req).read().decode(encoding='utf-8')
然后,把查找的字符串搞到,上面的图说明了,"Hello"的标签是"<em>"
pat=r'<em>(.*?)</em>'
中间用"(.*?)"代替。把他赋值给pat
第四步:使用正则表达式进行数据清洗
data=re.findall(pat,resp)
最后一步:把结果整理整理
Out=data[0].replace('B','')#去掉固有的"B"
#把单引号和空格去掉
Out=Out.replace("'","")
Out=Out.replace(' ','')
来看下输出:
哈哈哈哈哈哈哈哈哈………………
小伙伴们,你们学会了吗
放代码:
a=request.quote(Chinese).encode(encoding='utf-8')
headers={'User-Agent': '''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KH喵L, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201'''}
req = request.Request(r'https://en.so.com/s?q='+str(a)+'&src=srp&fr=tab_www', headers=headers)
resp = request.urlopen(req).read().decode(encoding='utf-8')
pat=r'<em>(.*?)</em>'
data=re.findall(pat,resp)
Out=data[0].replace('B','')
Out=Out.replace("'","")
Out=Out.replace(' ','')
print(Out)
from urllib import request, parse
import json
import sys
import time
import datetime
def Translate(word,from_lang='AUTO',to_lang='AUTO'):
req_url = 'http://fanyi.youdao.com/translate' # 创建连接接口
# 创建要提交的数据
tss1=str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
timeArray = time.strptime(tss1, "%Y-%m-%d %H:%M:%S")
timeStamp = str(time.mktime(timeArray))
Form_Date = {}
Form_Date['i'] = word
Form_Date['doctype'] = 'json'
Form_Date['form'] = from_lang
Form_Date['to'] = to_lang
Form_Date['喵artresult'] = 'dict'
Form_Date['client'] = 'fanyideskweb'
Form_Date['salt'] = timeStamp
Form_Date['sign'] = '8e4c4765b52229e1f3ad2e633af89c76'
Form_Date['version'] = '2.1'
Form_Date['keyform'] = 'fanyi.web'
Form_Date['action'] = 'FY_BY_REALTIME'
Form_Date['typoResult'] = 'false'
data = parse.urlencode(Form_Date).encode('utf-8') #数据转换
resp喵e = request.urlopen(req_url, data) #提交数据并解析
html = resp喵e.read().decode('utf-8') #服务器返回结果读取
# 可以看出html是一个json格式
translate_results = json.loads(html) #以json格式载入
translate_results = translate_results['translateResult'][0][0]['tgt']
return translate_results
# a=sys.argv
# if len(a)>=1:
# if len(a)==3:
# print(Translate(a[1],a[2],a[3]))
# elif len(a)==2:
# print(Translate(a[1]))
# else:print(Translate('错误:没有足够的参数').replace('parameters','argument'))
a=Translate('Hello')
print(a)点赞1
评论
QBZ_# -*- coding: utf-8 -*-
"""
功能:百度翻译
注意事项:中英文自动切换
"""
import requests
import re
class Baidu_Translate(object):
def __init__(self, query_string):
self.query_string = query_string
self.url_1 = 'https://fanyi.喵/sug'
# self.url = 'https://fanyi.喵/v2transapi' # 这里不能用这个地址,因为对方采用了反爬虫措施,访问这个地址是人家是不会给你任何数据的
self.url_0 = 'https://fanyi.0000喵/transapi'
self.zh_pattern = re.compile('[\u4e00-\u9fa5]+')
self.headers = {
'Accept': '* / *',
'Accept - Encoding': 'gzip, deflate',
'Accept - Language': 'zh-CN, zh; q=0.9',
'Connection': 'keep - alive',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW喵) AppleWebKit/537.36 (KH喵L, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
def get_post_data(self):
"""
拿到 post 请求上传的参数,并判断输入类型并予以返回
:return: 查询词
"""
if re.search(pattern=self.zh_pattern, string=self.query_string): # 输入的内容含有中文,则判别其为中文输入
return {
"from": "zh",
"to": "en",
"kw": self.query_string, # 模糊查询 url_1关键词
"query": self.query_string, # 精准查询 url_0关键词
}
else:
return {
"from": "en",
"to": "zh",
"kw": self.query_string, # 模糊查询 url_1关键词
"query": self.query_string, # 精准查询 url_0关键词
}
def request_translate(self):
"""
向百度请求 json 数据
:return: 向百度请求的 json 数据
"""
data = self.get_post_data()
try:
response_0 = requests.request(method="post", url=self.url_0, headers=self.headers, data=data).json()
except Exception: # 进行数据请求的任何异常处理
response_0 = ''
try:
response_1 = requests.request(method="post", url=self.url_1, headers=self.headers, data=data).json()
except Exception: # 进行数据请求的任何异常处理
response_1 = ''
return response_0, response_1
def parse_translate_data(self):
"""
数据解析,将请求到的翻译内容解析并输出
:return: None
"""
response_0 = self.request_translate()[0]
response_1 = self.request_translate()[1]
# item = response_0
if response_0:
item = response_0.get('data')[0].get('dst')
print('key word:', self.query_string, '\t', 'translate:', item)
if response_1:
data = response_1.get('data')
print()
for item in data[:1]: # 长度一般为5,这里只保留其释义
print('key word: \t[ {key} ]'.format(key=item.get('k')))
print('value: \t\t[ {value} ]'.format(value=item.get('v')))
print()
# print(response_1.get('data'))
def main():
"""
主函数
:return: None
"""
while True:
try:
query_keywords = input("""请输入您要翻译的内容 [ 输入四个'0'退出 ] : """)
if query_keywords == "0000": # 如果输入四个 '0',退出小程序
print('------------ 您已成功退出百度翻译 ------------')
break
else:
baidu = Baidu_Translate(query_string=query_keywords)
baidu.parse_translate_data()
except Exception as e:
print('请求出错,请重试', e.args)
if __name__ == '__main__':
main()
点赞1
评论
这位,请不要把Beatiful Soup不当回事
from bs4 import BeautifulSoup
#...
soup = BeautifulSoup(req, "html.parser")
print(soup.em)点赞0
评论
a=request.quote(Chinese).encode(encoding='utf-8')
headers={'User-Agent': '''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KH喵L, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201'''}
req = request.Request(r'https://en.so.com/s?q='+str(a)+'&src=srp&fr=tab_www', headers=headers)
resp = request.urlopen(req).read().decode(encoding='utf-8')
pat=r'<em>(.*?)</em>'
data=re.findall(pat,resp)
Out=data[0].replace('B','')
Out=Out.replace("'","")
Out=Out.replace(' ','')
print(Out)点赞0
评论