前言
最近隔壁小张找到我
"老王,最近我在学英语,不想想再打开网页翻译了,太麻烦了一直要开着网页"
"那你可以下载客户端吗,不是挺方便的嘛?"
"老王,我家电脑你又不是不知道,本来就是老款,这么多软件开着不是卡升天了?"
"那行,超简单利用python的requests模块利用网易有道云制作一个翻译小功能"
准备
- python
- python官方网址:https://www.python.org/
- 安装python requests模块,json模块
- requests模块 命令行窗口下输入 pip install requests
- json模块 python自带不需要安装
搞快点
-
需要在有道翻译中查找我们爬虫所需要的
url
以及post表单
打开有道云词典翻译网页,F12进入开
发者模式
,点击Network
下XHR
-
输入小张学习资料并点击翻译,查看此时发现一条有请求
-
点击请求,右侧会弹出菜单栏,我们重点就看
Headers
以及Preview
-
先点击
Headers
查看.-
General
中的RequestURL
就是我们需要的待请求url - 下拉后可以看到
Form Data
中的所有数据就是我们需要的post表单
-
由此我们获得了
url: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule post表单: i: 日本经典动作片 from: AUTO to: AUTO smartresult: dict client: fanyideskweb salt: 15975896029404 sign: af9c79eff66d919c9ed6f1a526781fca lts: 1597589602940 bv: 9ef72dd6d1b2c04a72be6b706029503a doctype: json version: 2.1 keyfrom: fanyi.web action: FY_BY_REALTlME
-
-
接下来看
Preview
,这是网页返回的json格式数据这其中就包含了我们需要的翻译,可以简单的理解为字典,但是需要用json模块来解码.有道云返回的json格式是词典嵌套列表的这样一个格式
-
那么从这里面我们可以得到所需要的翻译在返回的词典中是这样的一个位置
trans_dict["translateResult"][0][0]["tgt"]
-
接下来就是代码环节了想想我们的流程
- 使用input输入需要翻译的文本
- 提交post请求到url
- 接受返回的json数据
- 解析json数据提取出翻译结果
- 打印翻译结果
- 外面套一个循环以及加上退出选项
import json import requests # 7.循环 while True: # 1.控制台获取等待翻译文本 content=input("输入中文:") # 8.退出 if content == "": print("输个什么玩意?爷退了") exit() # 2.设定待请求url # 有道云坏的很加了个_o防止爬虫 # url="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" url="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule" # 3.建立post表单 post_form={ "i": content, "from": "AUTO", "to": "AUTO", "smartresult": "dict", "client": "fanyideskweb", "salt": "15975710195066", "sign": "1c7317b4699d018e5ae031c0077d7b80", "lts": "1597571019506", "bv": "9ef72dd6d1b2c04a72be6b706029503a", "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "action": "FY_BY_REALTlME", } # 4.提交post请求 # response接受返回的json格式 response=requests.post(url, data = post_form) # 5.接受相应结果,解析提取 trans_json = response.text trans_dict=json.loads(trans_json) trans_text=trans_dict["translateResult"][0][0]["tgt"] # 6.打印翻译结果 print("翻译结果:%s" % trans_text)