使用Urllib2製作有道翻譯器

程式碼打碟手發表於2018-08-09

       今天是學習爬蟲的第二天了,看了網上很多初學者都喜歡爬取字典翻譯。確實,有一個自己隨時隨地使用的翻譯神器,省去了開啟瀏覽器輸入網址的那些繁瑣,也騰出了不少時間。在這裡我選擇的是有道翻譯,相比於百度翻譯來說,它的特點就是使用了post請求來獲取json格式資料,而百度翻譯使用的是get請求。因為博主暫時還處於爬蟲的入門階段,而網上的入門資料和圖書館借閱的書籍還是python2相對多一些,所以我使用的庫也是urllib2和urllib,但後面還是肯定會轉到python3,畢竟python2到2020年官方就會停止支援了,還有一年多的時間。

1.分析post請求的URL:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

2.檢視Form Data

    其為post請求的資料,將其粘帖到sublime編輯器下,使用正則替換,將其轉化為字典的形式

"i": "python",
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": "1529759898442",
"sign": "8fa19ef594cd75bff554ef1f03dc5901",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTIME",
"typoResult": "false",

3.程式碼實現

#!/usr/bin/env python
# coding=utf-8

import urllib
import urllib2
def youdao():
    # 構建url連結
    # url = `http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule`
    # 這裡要去掉?號前面的_o,不然會進行加密演算法,導致失敗
    url = `http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule`
    # 構建請求頭
    headers = {
        "User-Agent" : `Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0`
    }
    words = raw_input("請輸入要翻譯的內容:")
    # 構建請求體
    format_data = {
        `i`: words,
        `from`:`AUTO`,
        `to`:`AUTO`,
        `smartresult`:`dict`,
        `client`:`fanyideskweb`,
        `salt`:`1526368137702`,
        `sign`:`f0cd13ef1919531ec9a66516ceb261a5`,
        `doctype`:`json`,
        `version`:`2.1`,
        `keyfrom`:`fanyi.web`,
        `action`:`FY_BY_REALTIME`,
        `typoResult`:`false`
    }
    # 進行url編碼
    format_data = urllib.urlencode(format_data)
    # 獲取request檔案(傳入了data引數,就是post請求)
    request = urllib2.Request(url, data = format_data, headers = headers)
    # 開啟請求檔案
    response = urllib2.urlopen(request)
    # 讀取檔案內容
    content = response.read()
    content = eval(content)
    ret = content["translateResult"][0][0][`tgt`]
    print(ret)
    #return ret
if __name__ == "__main__":
    youdao()

 


相關文章