0%

python爬虫实例之翻译接口

爬什么

使用翻译接口,用python代码做一个翻译小工具。

先练习用requests发送post请求

本来是要用百度翻译接口,获取post响应,但是百度这个接口的post数据包含了sign这个变化的键值,对初学者不太友好。为了体验requests发送post请求获取数据的用法,就找了有道的翻译接口。这是不是也从侧面反应了有道和百度的差距。
image.png
image.png
代码如下:

1
2
3
4
5
data = {"inputtext": "下雨了",
"type": "AUTO"}
headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Mobile Safari/537.36"}

r = requests.post("http://m.youdao.com/translate",data=data,headers=headers)

运行结果:
image.png

找到一个适合初级玩家的翻译接口*

360翻译接口,类似于百度翻译接口。可以用来练习json串处理。
image.png
image.png
代码如下:

1
2
3
4
5
6
7
8
9
10
import requests
import json

data = {"eng": "0",
"query": "下雨了"}
headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Mobile Safari/537.36"}

r = requests.post("https://fanyi.so.com/index/search",data=data,headers=headers)
result = json.loads(r.content.decode())["data"]["fanyi"]
print(result)

对json串处理一下,取翻译结果:
image.png

输入任意中文,自动翻译为英文

不知道这个网站识别输入语言的方式是什么,从url请求看不出来。暂时就做一个中译英的小工具。
太不容易辽!终于把这个代码弄出来了~~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import requests
import json
import sys

class fanyi:
def __init__(self,trans_str): #1. 准备post的url和post_data
self.trans_str = trans_str
self.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Mobile Safari/537.36"}
self.trans_url = "https://fanyi.so.com/index/search"

def parse_url(self,url,data): #2. 发送post请求,获取响应
r = requests.post(url,data=data,headers=self.headers)
return json.loads(r.content.decode())

def get_result(self,dict): #3. 提取翻译结果
result = dict["data"]["fanyi"]
print("result is :",result)

def run(self):
#1. 准备post的url和post_data
post_data = {"eng": "0","query": self.trans_str}
#2. 发送post请求,获取响应
dict = self.parse_url(self.trans_url,post_data)
#3. 提取翻译结果
self.get_result(dict)

if __name__ == '__main__': #这貌似就是主函数
trans_str = sys.argv[1] #执行这个程序必须带上一个参数,这个参数就是需要翻译的中文
my_fanyi = fanyi(trans_str)
my_fanyi.run()

依葫芦画瓢,用这种抽象的方式把这个简单的功能做出来了。这种方式比较好,先明白自己要做的事情分几步,然后一步一步做。以后就按照这种结构来写。
image.png

总结

复杂的任务可以拆解。递归是多么伟大的思想。大象放冰箱只需要三步。
复杂的世界也是由许多简单的规律组成。

-------------本文结束感谢您的阅读-------------