欢迎大家关注 【佛系学python】~
今天利用有道翻译在线网站做个简单的翻译程序
首先打开有道翻译的网址:
”http://fanyi.youdao.com/“
按 f12 打开检查工具
点击element浏览了一下
发现html里并没有我们想要的内容
说明它不是静态加载的
那应该是经过动态Ajax加载的
所以点击Network,开始它长这样的
你会看到啥都没有
按F5刷新一下就会出现很多网址或文件
这些文件是有道翻译网页的组成部分
从上到下依次加载
不过这里不要刷新
不然待会还要花时间找对应的信息
在1处随便写些内容
然后点击XHR(这个先点后点都没关系)
然后会在3处跳出一个网址
点击headers会看见第4处的内容
点击preview
会发现里面有我们要翻译的内容和结果
看来我们找对了方向了
它是以json格式进行存储数据的
这对于我们提取数据会更加方便
那居然知道网址后就是提取数据
那我们要怎么提取呢
回到我们的headers,在第4处有个网址
这个网址才是真正存储我们需要的数据的网址
继续往下看
找到 Request Method
原来它是post方式对服务器进行请求的
那我们要提交什么数据呢
继续往下看
在From data里发现了我们想要翻译的内容
看来以下这段就是我们需要提交的数据了
这么多数据我们该怎么获得呢
别急~
我们试着翻译其他内容
看看有哪些值会变
经过对比后发现
有四个值发生了变化
分别是”i,salt,sign,ts"这四个
i是我们要翻译的内容
另外三个不知道是什么
后面发现这三个不用管也可以
知道我们的目标在哪后
就是写代码进行提取数据了
因为是json格式
相当于字典
所以很好获取
因为代码不是很多
也不会很难理解
所以有些方面我就不细讲了
直接上代码
import requests
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
data = {
"i":input("输入要翻译的内容:"),
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"bv": "146ae0587a435b36d5e7ac4d9b08bde6",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action":" FY_BY_REALTlME"
}
req = requests.post(url,data = data) #以post的方式
js = req.json()
result = js["translateResult"][0][0]["tgt"]
print(result)
requests对象有个向服务器请求有两种方法
一种是get请求
一种就是今天这种post请求
这两种有什么区别呢?
get请求是不用提交表单的
也就是不用提交额外的数据
一般用于下载静态网页之类的
post请求就是需要我们提供一些数据给服务器的
比如说登陆就是用post请求
然后post方法里有个data参数
用来存储提交的数据
它是以字典的数据结构进行存储的
因为我们要从json格式里提取数据
所以我们用json方法将下载后的数据转换为json格式
最后就跟提取字典一样操作就OK了
好啦,今天的分享就到这里
希望大家能够把这篇文章分享给别人
这也是我写作的动力~
谢谢大家