python3:爬有道翻譯(命令列版)

五力發表於2018-07-13

python:3.6.5
未用第三方庫/一個簡單的爬蟲/用於實現有道翻譯,查詞無憂了。
問題?
其實寫這個的過程中,遇到了一個問題,當前爬起的結果,只有一個結果,並沒有爬取到更多的結果。
在網上也找了很久,一直沒有找到答案,走過路過,如果有緣人你看到了我的問題剛好又有解決方案,請幫忙留言,謝謝. 

這個就是我這到的返回結果:


而事實上在瀏覽器端看到返回的json是這樣的;


百思不得其解,而想到為selenium,但這個翻譯速度實在是太慢了,無法接受。

不多說了,先上code:

#!/user/bin/python
#-*- coding:utf-8 -*-

from urllib import request
from urllib import parse
import json


def youdaoTranslate(value, count):
    if value == '':
        print('輸入內容為空@_@')
        return False
    else:
        # Request URL
        responseURL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
        # 待提交準備Post給url的Data:定義為dict
        form_Data = {}
        form_Data['i'] = value
        form_Data['from'] = 'AUTO'
        form_Data['to'] = 'AUTO'
        form_Data['smartresult'] = 'dict'
        form_Data['client'] = 'fanyideskweb'
        form_Data['doctype'] = 'json'
        form_Data['version'] = '2.1'
        form_Data['keyfrom'] = 'fanyi.web'
        form_Data['action'] = 'FY_BY_REALTIME'
        form_Data['typoResult'] = 'false'
        # 使用urlencode方法轉換標準格式 
        data = parse.urlencode(form_Data).encode('utf-8')
        response = request.urlopen(responseURL,data)
        html = response.read().decode('utf-8')
        # 使用JSON
        translate_result = json.loads(html)
        # print(translate_result)
        # 找到翻譯結果
        # 這裡推薦一個格式化JSON的好工具:https://c.runoob.com/front-end/53
        translate_result_main = translate_result['translateResult'][0][0]['tgt']
        # 列印翻譯結果
        print(f'{count}. {translate_result_main}\n\n')
        return True
    
if __name__ == '__main__':
    try:
        count = 1
        while True:
            print('-'*26)
            word = input('請輸入待翻譯的單詞或句子:\n').strip()
            if youdaoTranslate(word, count) == True:
                count += 1
    except KeyboardInterrupt:
        print('\a手動退出!歡迎再來')
    

相關文章