1.0 版本
#首先貼上結果,自動檢測語言
對于這種需要送出資料的爬蟲,最主要的就是擷取form data了,具體的擷取方式請參考
如何通過Chrome擷取post表單資料
這裡需要注意的是,同一個網站的表單的屬性名可能會有變化,自己使用的時候需要注意,否則可能會導緻結果不對,或者亂碼什麼的。
下面是基于python3.6.1版本的程式
# -*- coding: UTF-8 -*-
from urllib import request
from urllib import parse
import json
if __name__ == "__main__":
#Request URL
Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#建立Form_Data字典,存儲得到的Form Data
Form_Data = {}
Form_Data['type'] = 'AUTO'
Form_Data['from'] = 'AUTO' #自動檢測語言
Form_Data['to'] = 'AUTO'
Form_Data['smartresult'] = 'dict'
Form_Data['doctype'] = 'json'
Form_Data['version'] = '2.1'
Form_Data['keyfrom'] = 'fanyi.web'
Form_Data['action'] = 'FY_BY_REALTIME'
#使用urlencode方法轉換标準格式
while 1:
Form_Data['i'] = input("請輸入要翻譯的内容:")
if Form_Data['i'].lower()=='exit':
print('已退出')
exit(0)
data = parse.urlencode(Form_Data).encode('utf-8')
#傳遞Request對象和轉換完格式的資料
response = request.urlopen(Request_URL,data)
#讀取資訊并解碼
html = response.read().decode('utf-8')
#使用JSON
translate_results = json.loads(html)
#找到翻譯結果
translate_results = translate_results['translateResult'][0][0]['tgt']
#列印翻譯資訊
print("翻譯的結果是:%s" % translate_results)
2.0 版本 2018-3-29更新
在昨天的基礎上,加入了金山和百度的翻譯,以及對三者的結果進行比較的程式
先貼上結果
然後貼上代碼(注意,現在這個2.0版本中,金山和有道的正常使用,可以輸入任何語言。百度的目前隻能支援英譯中,百度的是真的難搞,有興趣的童鞋可以給你幾個參考連結:百度翻譯最新接口破解 百度翻譯通用API(第二個連結是百度官方的,但是版本比較舊,和現在的API差別比較大,而且從爬取的難度上來說,百度要比其他兩個更難許多),在百度的官方參考代碼中,使用的是python2版本的,我這裡自己寫了python3版本的)
# -*- coding: UTF-8 -*-
from urllib import request
from urllib import parse
import json
import random
import _md5
import hashlib
def process(Request_URL,Form_Data):
# 使用urlencode方法轉換标準格式
data = parse.urlencode(Form_Data).encode('utf-8')
# 傳遞Request對象和轉換完格式的資料
response = request.urlopen(Request_URL, data)
# 讀取資訊并解碼
html = response.read().decode('utf-8')
# 使用JSON
translate_results = json.loads(html)
return translate_results
def Jinshan(onlyone=1,word=None):
Request_URL = 'http://fy.iciba.com/ajax.php?a=fy'
#建立Form_Data字典,存儲Form Data
Form_Data = {'f' : 'auto',
't' : 'auto'}
if onlyone==0:
Form_Data['w']=word
translate_results = process(Request_URL, Form_Data)
# 找到翻譯結果
if 'out' in translate_results['content']:
translate_results = translate_results['content']['out']
else:
translate_results = translate_results['content']['word_mean']
# 列印翻譯資訊
print("金山翻譯結果是:%s" % translate_results)
return
print('正在使用金山詞霸\n')
while 1:
Form_Data['w'] = input("請輸入要翻譯的内容:")
if Form_Data['w'].lower()=='exit':
print('已退出金山詞霸')
return
translate_results=process(Request_URL,Form_Data)
#找到翻譯結果
if 'out' in translate_results['content']:
translate_results = translate_results['content']['out']
else:
translate_results = translate_results['content']['word_mean']
#列印翻譯資訊
print("金山翻譯結果:%s" % translate_results)
def Youdao(onlyone=1,word=None):
#對應上圖的Request URL
Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#建立Form_Data字典,存儲Form Data
Form_Data = {'type' : 'AUTO',
'from' : 'AUTO',
'to' : 'AUTO',
'smartresult':'dict',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action' : 'FY_BY_REALTIME'
}
if onlyone==0:
Form_Data['i']=word
translate_results = process(Request_URL, Form_Data)
# 找到翻譯結果
result = translate_results['translateResult'][0][0]['tgt']
# 列印翻譯資訊
print("有道翻譯結果:%s" % result)
return
print('正在使用有道翻譯\n')
while 1:
Form_Data['i'] = input("請輸入要翻譯的内容:")
if Form_Data['i'].lower()=='exit':
print('已退出有道翻譯')
return
translate_results = process(Request_URL, Form_Data)
#找到翻譯結果
result = translate_results['translateResult'][0][0]['tgt']
# 列印翻譯資訊
print("有道翻譯結果:%s" % result)
def Baidu(onlyone=1,word=None):
Request_URL = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
# 建立Form_Data字典,存儲Form Data
Form_Data = {'from' : 'auto',
'to' : 'zh',
'appid':'20151113000005349',
'salt': random.randint(32768, 65536).__str__(),
}
secretKey = 'osubCEzlGjzvw8qdQc41'
if onlyone==0:
Form_Data['q']=word
sign = Form_Data['appid'] + Form_Data['q'] + Form_Data['salt'] + secretKey
Form_Data['sign'] = hashlib.md5(sign.encode(encoding='gb2312')).hexdigest()
translate_results = process(Request_URL, Form_Data)
# 找到翻譯結果
result = translate_results['trans_result'][0]['dst']
# 列印翻譯資訊
print("百度翻譯結果:%s" % result)
return
print('正在使用百度翻譯\n')
while 1:
Form_Data['q'] = input("請輸入要翻譯的内容:")
if Form_Data['q'].lower()=='exit':
print('已退出百度翻譯')
return
sign =Form_Data['appid'] + Form_Data['q'] + Form_Data['salt'] + secretKey
Form_Data['sign'] = hashlib.md5(sign.encode(encoding='gb2312')).hexdigest()
translate_results = process(Request_URL, Form_Data)
#找到翻譯結果
print(translate_results)
result = translate_results['trans_result'][0]['dst']
# 列印翻譯資訊
print("百度翻譯結果:%s" % result)
def all():
while 1:
word=input("請輸入要翻譯的内容:")
if word=='exit':
print('已退出')
return
Youdao(0,word)
Jinshan(0,word)
Baidu(0,word)
if __name__ == '__main__':
soft=input("請選擇要使用的翻譯軟體:1.有道翻譯 2.金山詞霸 3.百度翻譯 4.都看一下呗")
if soft=='1':
Youdao()
elif soft=='2':
Jinshan()
elif soft == '3':
Baidu()
elif soft=='4':
all()
else:
print('hhh,您這輸的小的沒設定的選項啊')
print("白白,歡迎下次再來使用")