urllib.parse — URL解析


urllib.parse - 將URL解析為組件

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

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

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

URL解析

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

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

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

    >>> 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,將以路徑組件開始

     >>> 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在返回值中設置為空字符串。

    返回值是一個元組,這樣我們可以通過索引或者嗎命名屬性訪問,如下:

    屬性 索引 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)
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM