【日常】Google翻译接口编写

最近有批量翻译的需求,看了一下有python接口的翻译效果都不行,最终还是自己写了一个调用google翻译的类。因为现在google翻译反爬虫的手段很强势,普通requests很难突破,这里给出基于selenium的代码(Firefox)

from requests import Session
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time

"""
	作者:囚生CY
	平台:CSDN
	时间:2019/05/31
	转载请注明原作者
	创作不易,仅供分享
"""

# https://translate.google.cn/translate_a/single?client=webapp&sl=en&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&otf=2&ssel=3&tsel=0&kc=12&tk=543918.972561&q=I want to be a man
# Google现在反爬虫做得确实很好, 上面这个是提交URL, 里面有个tk字段我看不懂什么意思, 而且这个tk字段是很关键的字段, 缺少后无法获取
# 所以只能考虑先用selenium弄了

class Translation():
	def __init__(self,):
		self.langs = ["cn","en"]										 # 目前处理中英文
		self.options = webdriver.FirefoxOptions()						 # 火狐驱动配置
		self.options.add_argument("--headless")							 # 设定无头浏览器的配置
		pass

	def translate(self,string,target="cn",headless=False):
		if not target in self.langs:
			print("ERROR: 未知的语言")
			return False
		b = webdriver.Firefox(options=self.options)	if headless else webdriver.Firefox()					 # 使用无头浏览器省时间
		b.get("https://translate.google.cn/")
		if target=="cn": pass											 # 默认翻译为中文
		if target=="en": b.find_elements_by_id("sugg-item-en")[1].click()# 英文就点一下(这个定位有点麻烦, 因为有个跟它长得很像的元素, 之后再想想办法吧)
		time.sleep(.5)
		b.find_element_by_id("source").send_keys(string)
		print("开始等待...")
		t = time.time()
		# 一般的短句子这个等待很短,只有不到1秒,大部分时间浪费在前后的代码上
		WebDriverWait(b,30).until(lambda b_: b_.find_element_by_xpath("//span[@title='']").is_displayed())
		html = b.page_source
		soup = BeautifulSoup(html,"lxml")
		span = soup.find("span",class_="")
		print(span.string)
		b.quit()

if __name__ == "__main__":
	t = Translation()
	#t.translate("I am a Chinese",target="cn")
	t.translate("我是一个中国人",target="en")


这里使用了无头浏览器(设定参数headless为True),运行时不会弹出浏览器,如果出问题可以改掉webdriver的options参数看看运行哪里有问题。

因为翻译成英文对应的那个按钮与左边那个英文的元素极其相似,用xpath定位需要加很多条件,就太硬了。我代码里直接用id定位取第二个元素,可能过一段时间出问题(比如左边没有英文这个按钮了)?

测试基本上问题不大,速度有点堪忧,主要浪费在打开浏览器上,普通的一句话1秒内都能翻译出来;

附一张上面代码的运行结果?

分享学习,共同进步!

发布了40 篇原创文章 · 获赞 133 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/CY19980216/article/details/90712996