用户:wrmdcxy查看:220 回复: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)
第一行的Chinese是你想填进去的任何中文哦
点赞0
评论
不是叫Request吗,是不是打错字了【滑稽】
话说要翻译直接translate不就好了吗……
噢,是的,不小心打错了,Sorry。 是的,直接翻译就行了,只不过用爬虫也可以实现呀,首先是想好玩(哈哈哈),其次不想下载,然后推广一下爬虫,最后练练手嘛
我上次还用爬虫用312行代码打印了Hello world呢233
呵呵呵,估计大家都是为了好玩
上次我直接吧有道翻译给……
百度也被我破解并发现翻译方式了…
感觉这两个的防护不够厉害
点赞0
评论
其实我本来就是想爬有道的,可是不知出了什么问题,发送的总是get请求,并且响应里没喵Hello"
待会给你代码
谢谢,不用了,我已经试过了,在响应里根本没有我需要的东西
真的有
百度。。。
你应该是F12的那个找错了,你再找一找
我把整个响应都弄了下来,然后输入ptint('hello' in resp),结果是False
是print(),打错了
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
评论
Wonderful!
有道太容易被爬掉
呵呵呵
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
评论
self.header是爬虫伪装成浏览器的东西,对吧?
是的
浏览器进去是合法的
不会被拦截
百度的反爬虫做的不太好
嗯是的
话说,你的Python代码是Py2的吗?(Print都没加括号)
是的,没错,我不想加括号,所以就写成Python2的
这个代码写的不错哈
这位,请不要把Beatiful Soup不当回事
from bs4 import BeautifulSoup
#...
soup = BeautifulSoup(req, "html.parser")
print(soup.em)点赞0
评论
谢谢指导
额,我爬虫都是爬...
emmm... 我玩爬虫都用这种方法的 emmm...
这种方法我是第一次认识(#尴尬)……我也是萌新
话说,Scrapy去哪儿了?(偷笑)
bs4,我天天用
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
评论
我看到了网站,怎么下载啊?
(英文文盲求助)
点赞0
评论
360浏览器有翻译功能
其实开头有个可以复制的东西
再不行试试Googletrans https://shequ.codemao.cn/community/175167
Google也有翻译功能哟
嗯。
那你怎么学Python的???
可以了,海龟编辑器上有下载
好的~
其实有很多事情可以使用“偷懒”的方式解决