urllib.parse — URL解析

urllib.parse - 將URL解析爲組件html

urllib.parse定義了一個標準接口,用於在組件中解析統一資源定位符(URL)字符串(尋址方案,網絡位置,路徑等),將組件組合回URL字符串,並將「相對URL」轉換爲絕對URL給出「基本URL」。python

該模塊旨在匹配相對統一資源定位器上的Internet RFC。它支持下列URL方案:fileftpgopherhdlhttphttpsimapmailtommsnewsnntpprosperorsyncrtsprtspusftpshttpsipsipssnewssvnsvn+sshtelnetwaiswswss網絡

urllib.parse模塊定義了分爲兩大類的功能:URL解析URL引用app

URL解析

URL解析功能側重於將URL字符串拆分爲其組件,或者將URL組件組合爲URL字符串。ssh

urllib.parse.urlparse(urlstring,scheme ='',allow_fragments = True )

  • 將URL解析爲六個組件,返回一個6個元素的元組,對應URL的通常結構:scheme://netloc/path;parameters?query#fragment。每一個元組項都是一個字符串,可能爲空。組件不會以較小的部分分解(例如,網絡位置是單個字符串),而且不會展開%escapes。如上所示的分隔符不是結果的一部分,除了路徑組件中的前導斜槓,若是存在則保留。例如:ide

    >>> from urllib.parse import urlparse
    >>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
    >>> o
    ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
    >>> o.scheme
    'http'
    >>> o.port
    80
    >>> o.geturl()
    'http://www.cwi.nl:80/%7Eguido/Python.html'
  • 只有在'//'正確引入的狀況下, urlparse纔會識別netloc。不然,假定輸入是一個相對URL,將以路徑組件開始svn

    >>> from urllib.parse import urlparse
    
     >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
     ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
     >>> urlparse('www.cwi.nl/%7Eguido/Python.html')
     ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html', params='', query='', fragment='')
     >>> urlparse('help/Python.html')
     ParseResult(scheme='', netloc='', path='help/Python.html', params='', query='', fragment='')
  • scheme參數給出了默認的尋址方案,只有在URL沒有指定尋址方案時才使用。它應該是與urlstring相同的類型(文本或字節),只是默認值''老是容許的,並在適當時自動轉換爲''函數

    若是allow_fragments參數爲false,則沒法識別片斷標識符。相反,它們被解析爲路徑,參數或查詢組件的一部分,並fragment在返回值中設置爲空字符串。ui

    返回值是一個元組,這樣咱們能夠經過索引或者嗎命名屬性訪問,以下:編碼

    屬性 索引 Value if not present
    scheme 0 協議 scheme參數
    netloc 1 網絡位置部分 空字符串
    path 2 分層路徑 空字符串
    params 3 最後一個路徑元素的參數 空字符串
    query 4 查詢 空字符串
    fragment 5 信息片斷 空字符串
    username 用戶名 None
    password 密碼 None
    hostname 主機名 None
    port 端口號 None
  • 若是在URL中指定了無效端口,則讀取該port屬性將引起ValueError異常。

  • netloc屬性中不匹配的方括號將引起ValueError。

  • 與全部命名元組的狀況同樣,子類還有一些特別有用的附加方法和屬性。一種這樣的方法是_replace()。該_replace()方法將返回一個新的ParseResult對象,用新值替換指定的字段。

    >>> from urllib.parse import urlparse
     >>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
     >>> u
     ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
     >>> u._replace(scheme='http')
     ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')

urllib.parse.parse_qs(qs,keep_blank_values = False,strict_parsing = False,encoding ='utf-8',errors ='replace',max_num_fields = None )

  • 解析做爲字符串參數給出的查詢字符串(類型爲 application / x-www-form-urlencoded的數據)。數據做爲字典返回。字典鍵是惟一的查詢變量名稱,值是每一個名稱的值列表。
  • 可選參數keep_blank_values是一個標誌,指示百分比編碼查詢中的空值是否應被視爲空字符串。true值表示空格應保留爲空字符串。默認的false值表示將忽略空白值並將其視爲未包含它們。
  • 可選參數strict_parsing是一個標誌,指示如何處理解析錯誤。若是爲false(默認值),則會以靜默方式忽略錯誤。若是爲true,則錯誤會引起ValueError異常。
  • 可選的編碼和錯誤參數指定如何將百分比編碼的序列解碼爲Unicode字符,正如 bytes.decode()方法所接受的那樣。
  • 可選參數max_num_fields是要讀取的字段的最大數量。若是設置,則若是讀取的字段超過max_num_fields,則拋出ValueError。
  • 使用urllib.parse.urlencode()函數(doseq參數設置爲True)將這些字典轉換成查詢字符串。

urllib.parse.parse_qsl(qs,keep_blank_values = False,strict_parsing = False,encoding ='utf-8',errors ='replace',max_num_fields = None )

  • 將給定的查詢字符串解析爲字符串參數(類型爲application/x-www-form-urlencoded的數據)。數據做爲名稱、值對列表返回。
  • 可選參數keep_blank_values是一個標誌,指示百分比編碼的查詢中的空白值是否應該被視爲空白字符串。true值指示空白應保留爲空白字符串。默認的false值表示要忽略空白值,並將其視爲未包含。
  • 可選參數strict_parser是一個標誌,指示如何處理解析錯誤。若是爲false(默認值),錯誤將被默認忽略。若是爲真,錯誤將引起ValueError異常。
  • 可選的encodingerrors參數指定如何將百分比編碼的序列解碼爲Unicode字符,正如bytes.decode()方法所接受的那樣。
  • 可選參數max_num_fields是要讀取的字段的最大數量。若是設置,則若是讀取的字段超過max_num_fields,則拋出ValueError。
  • 使用urllib.parse.urlencode()函數將這些對列表轉換爲查詢字符串。

urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)

  • 這相似於urlparse(),但不會從URL中分割參數。若是須要將容許參數應用於URL路徑部分的每一個段的最新URL語法(請參閱RFC 2396),則一般應該使用該方法而不是urlparse()。須要一個單獨的函數來分離路徑段和參數。這個函數返回5個(對比 urlparse沒有params)元素的元組:

    (addressing scheme, network location, path, query, fragment identifier)
相關文章
相關標籤/搜索