猫史档案馆


Python翻译模块

用户:wrmdcxywrmdcxy查看: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

呵呵,是挺喵!

网站全貌:center_image

center_image

center_image

center_image

center_image

center_image

center_image

center_image

center_image

额……看不懂……我可是英文盲…………

emotion_雷电猴_疑问

emotion_编程猫_搓头但是,你也应该高兴,因为我们不用创建一个云数据词库emotion_编程猫_嗨起来

但是你选择不下载的话………………词库…………

啊,不要想这些了!其实我们还有另一种办法……那就是——

      当当当当……                   爬虫

emotion_编程猫_冷漠:啥?爬虫?

没错,就是爬虫

emotion_编程猫_翻白眼:为什么?爬虫翻译有什么关系?

当然有,现在的浏览器都有一个翻译功能吧,就是没有,也有一些在线翻译网站吧。。。

emotion_雷电猴_嗯嗯

所以呢,我们只需要向翻译网站发送一个POST请求(GET请求也没关系啦,关键看你选哪个翻译网站)然后根据请求找到我们需要的东西就好了。

emotion_编程猫_厉害了:原来如此

好了,废话不说,开始吧

第一步:最熟悉的,导入模块,这个我不多说了,不就是URLlib和requst吗(requsts也行)

噢还有正则表达式(re)

第二步:找到网址,并检查是否有需要的信息。

这个嘛……我直接用360的英文啦

center_image

然后按下F12,选择Hello

center_image

然后看看网址center_image

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(' ','')

来看下输出:

center_image

哈哈哈哈哈哈哈哈哈………………emotion_编程猫_厉害了

 

小伙伴们,你们学会了吗

 

放代码:

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)

 


回复

上一页1 页 / 共 1下一页
wrmdcxywrmdcxy

第一行的Chinese是你想填进去的任何中文哦

点赞0


评论


superstar_pengsuperstar_peng

emotion_心

点赞0


评论


superstar_pengsuperstar_peng

emotion_星能猫_yeemotion_雷电猴_哇噻

点赞0


评论


QBZ_QBZ_

emotion_编程猫_搓头emotion_编程猫_点赞emotion_编程猫_点赞

点赞0


评论


QBZ_QBZ_

猴急快来加精

点赞0


评论


TobylaiTobylai

其实googletrans也行

点赞0


评论


TobylaiTobylai

上次我直接吧有道翻译给……
百度也被我破解并发现翻译方式了…
感觉这两个的防护不够厉害

点赞0


评论


钢铁龘齾钢铁龘齾

嗯……我尝试用pip下载……

center_image

 

 

可是似乎不太管用……

center_image

 

 

 

有知道这是怎么一回事的吗?

点赞0


评论


TobylaiTobylai

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_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


评论


函数Chara函数Chara

这位,请不要把Beatiful Soup不当回事

from bs4 import BeautifulSoup
#...
soup = BeautifulSoup(req, "html.parser")
print(soup.em)

点赞0


评论


TobylaiTobylai

emotion_编程猫_加油

点赞0


评论


星空之忆星空之忆

顶 

点赞0


评论


wrmdcxywrmdcxy

沉下去了!ddd

点赞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


评论


爱因斯坦的弟子爱因斯坦的弟子

好“难”啊,爬虫最重要的就是爬取数据,再进行处理

点赞1


评论


板凳等于椅板凳等于椅

我看到了网站,怎么下载啊?

(英文文盲求助)

点赞0


评论