Python3中urlopen()詳解

pythontab發表於2018-07-20

一.  簡介

urllib.request.urlopen()函式用於實現對目標url的訪問。


函式原型如下:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) 

url:  需要開啟的網址

data:Post提交的資料

timeout:設定網站的訪問超時時間


直接用urllib.request模組的urlopen()獲取頁面,page的資料格式為bytes型別,需要decode()解碼,轉換成str型別。


二.  函式引數介紹


1. url 引數:目標資源在網路中的位置。可以是一個表示URL的字串(如:http://www.pythontab.com/);也可以是一個urllib.request物件,詳細介紹請跳轉

2. data引數:data用來指明發往伺服器請求中的額外的引數資訊(如:線上翻譯,線上答題等提交的內容),data預設是None,此時以GET方式傳送請求;當使用者給出data引數的時候,改為POST方式傳送請求。

3. timeout:設定網站的訪問超時時間

4. cafile、capath、cadefault 引數:用於實現可信任的CA證照的HTTP請求。(基本上很少用)

5. context引數:實現SSL加密傳輸。(基本上很少用)


三. 返回處理方法詳解

urlopen返回物件提供方法:

read() , readline() ,readlines() , fileno() , close() :對HTTPResponse型別資料進行操作

info():返回HTTPMessage物件,表示遠端伺服器返回的頭資訊

getcode():返回Http狀態碼。如果是http請求,200請求成功完成;404網址未找到

geturl():返回請求的url


四. 版本區別, 注意事項

python2和python3在匯入urlrequest的方式都不一樣。 

python2是這樣:import urllib2 

而python3裡面把urllib分開了,分成了urlrequest和urlerror,在這裡我們只需匯入urlrequest即可。from urllib.request import urlopen


五. 例項

下面這個程式,實現了urlopen()函式的大部分功能,特別是data引數。data自定義,data格式轉換,資料的編碼encode()和解碼decode()。

#coding=utf-8
#Python3.x
'''
利用有道翻譯進行線上翻譯
'''
import urllib.request
import urllib.parse
import json
def traslate(words):
    #目標URL
    targetURL = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
    #使用者自定義表單,words表示的是使用者要翻譯的內容。這裡使用的是dict型別,也可以使用元組列表(已經試過的)。
    data = {}
    data['type'] = 'AUTO'
    data['i'] = words
    data['doctype'] = 'json'
    data['xmlVersion'] = '1.8'
    data['keyfrom'] = 'fanyi.web'
    data['ue'] = 'UTF-8'
    data['action'] = 'FY_BY_CLICKBUTTON'
    data['typoResult'] = 'true'
    #將自定義data轉換成標準格式
    data = urllib.parse.urlencode(data).encode('utf-8')
    #傳送使用者請求
    html = urllib.request.urlopen(targetURL, data)
    #讀取並解碼內容
    rst = html.read().decode("utf-8")
    rst_dict = json.loads(rst)
    return rst_dict['translateResult'][0][0]['tgt']
if __name__ == "__main__":
    print("輸入字母q表示退出")
    while True:
        words = input("請輸入要查詢的單詞或句子:\n")
        if words == 'q':
            break
        result = traslate(words)
        print("翻譯結果是:%s"%result)


相關文章