白嫖有道翻译制作一个小型翻译程序

瞎扯

通过几天的爬虫相关内容的学习,站长现在可以徒手写出一些小蜘蛛了。

大家使用机器翻译的方法是不是还停留在下载其提供的臃肿的 APP 或打开其充满广告的 Web 端?

今天给在学编程的朋友们带来白嫖有道翻译网页版制作小型翻译程序的教程;非编程人员也不要慌,文末提供打包成可执行程序(.exe)的下载方式。


开始动工

观察网站

首先,上网搜索(洒家用的是百度)“有道翻译”,可以在最顶两条都是结果,只不过一个界面设计较现代化,是电脑端视图;另一个界面简陋,是手机端网站。

我们选择这个界面简陋的手机端网站,首先看中其界面简单,好操作,而且可以考验我们的更深层的爬虫基础(如正则表达式的使用),,,

当然,选择电脑端也不是不行,,,两个网页相关内容的比较如下表:

参数 PC WAP
渲染 客户端渲染 客户端渲染
请求方式 POST POST
返回内容 JSON HTML

而且,电脑端视图现在有加盐(即一系列难以反推的加密方式,防盗用):

另外,电脑端的是实时翻译,就算你才输了一个字母。。

相比来说,手机端就比较和谐。。


开刀

我们用浏览器打开 有道翻译

按下 F12 调出开发者工具,点击顶栏的 Network ,在下面类型处选择 All ,然后点击搜索框左侧第二个按钮(Clear,清除),以便观察数据变化。

我们在网页内的输入框输入一串英文,然后点击翻译,这里以"Are you kidding?"为例。

界面会弹出一些广告,不要慌,点击关闭,可以看见在下方译文处返回了该英文的翻译结果:

此时,观察右侧开发者工具,可以看见多了很多项被加载的内容。

排除图片等媒体文件以及脚本文件,大概就只剩排在最上面,和网页同名的translate页了。

点击它,再点击 Preview (预览),

好家伙,这不就是网页的核心部分吗?由此可以基本断定该网站为客户端渲染型网站。

返回 Headers (头部)查看相关内容,

从这里不难看出,这个网站需要用 POST 方式请求而非 GET,发送请求时需要带上 data,内容组成为两部分:一个是输入的文本(inputtext);一个是翻译模式(type,即指定输入的语言以及要翻译成什么语言)。最后获取成功(Status Code = 200)会返回一个带有翻译结果的 HTML 文件,若用浏览器则可以正常显示,也可以用正则表达式、BeautifulSoup、xpath 等方式提取里面的所需部分(即翻译结果)。

我们点击 Response(相应),可以看到 Preview 里的内容的源代码,

往下翻到中间偏后的地方可以看到“译文”二字,下面就有所需的译文:

就是这个网页有点皮,不按格式出牌,使得我们所需的结果的整个标签被分行表示成下面这个样子:

<ul id="translateResult">
                                                                        <li>你在开玩笑吧?</li>
                                                            </ul>

当然,这难不倒我们,了解完以上内容,下面我们开始动工写程序。


写程序

首先自行搭建 Python 编程环境。

首先导入我们这次需要的两个模块:

import re
import requests

其中,re(正则模块)是 Python 自带模块,requests 是第三方模块,需要使用 pip 进行安装,需要在命令行窗口输入 pip install requests,具体操作请上网搜索。

需要请求的链接:

url = "https://m.youdao.com/translate"  # 所要请求的链接:手机端的有道翻译网页

用于匹配翻译结果的正则表达式:

obj = re.compile(r'<ul id="translateResult">.*?<li>(?P<result>.*?)</li>.*?</ul>', re.S)  # 定义用于搜索翻译结果的正则表达式

准备好要发送请求所带的数据(字典形式):

data = {
        "inputtext":inputtext,
        "type": type_}

其中,所有的键:inputtext、type_(type 为保留关键词不可使用为变量名) 为变量名,后面有用。

发送请求并将结果保存为resp

resp = requests.post(url,data=data)

从结果文本中搜索翻译结果赋值给result

result = obj.search(resp.text)

这时,需要使用翻译结果的文本内容就可以用下面方式调用:

result.group("result")

上面所有内容要写成一个可以输一句翻译一句的敲回车爱好者专用程序的代码就是下面这样(汇总):

import requests
import re

url = "https://m.youdao.com/translate"  # 所要请求的链接:手机端的有道翻译网页
obj = re.compile(r'<ul id="translateResult">.*?<li>(?P<result>.*?)</li>.*?</ul>', re.S)  # 定义用于搜索翻译结果的正则表达式

def translate(inputtext, type_ = "AUTO"):  # 默认翻译方式为“通用”,可实现中英互译。
    data = {
        "inputtext":inputtext,
        "type": type_}
    resp = requests.post(url,data=data)
    result = obj.search(resp.text)
    return result.group("result")

# 开始循环
while True:
    message = input(">>>")
    print(translate(message))

成果

运行这个程序,你可以达到下面这个效果:

>>>Are you kidding?
你在开玩笑吧?
>>>你个老六
You are a old six
>>>Fuck me hard
他妈的我
>>>take a shit
取一个狗屎
>>>funny mud pee
funny mud pee
>>>

由此可见,有道翻译还是得跟人家百度、谷歌学习学习,翻译结果太生硬了~~


竣工

此次爬虫实战就讲到这里,希望大家可以学习其相关核心内容,可以举一反三,写出更多便捷适用的小蜘蛛。

资源下载

[download file='youdaotrans.exe' size='6.12 MB']https://pan.quark.cn/s/c8e745eb6383[/download]

阅读剩余
THE END