url處理

一、url處理

python3中url處理包名稱爲urllib,其中主要功能模塊如下:
error模塊
parse模塊
request模塊
response模塊
robotparse模塊

1.1、url解析

舉例1:

from urllib.parse import urlparse
url="http://alice:[email protected]:80/%7Ealice/python.cgi?query=text#sample"
print(urlparse(url))     #調用urlparse模塊中的urlparse方法,其他主要方法還有urljoin,urlsplit和urlunsplit等。

結果如下:
ParseResult(scheme='http', netloc='alice:[email protected]:80', path='/%7Ealice/python.cgi', params='', query='query=text', fragment='sample')

說明:1’urlparse對於url定義是採用六元組,如下:
scheme://netloc/path;parameters?query#fragment。

>>> r.scheme
'http'
>>> r.netloc
'alice:[email protected]:80'
>>> r.path
'/%7Ealice/python.cgi'
>>> r.params
''
>>> r.query
'query=text'
>>> r.fragment
'sample'
>>> r.username
'alice'
>>> r.password
'secret'
>>> r.hostname
'www.hostname.com'
>>> r.port
80
>>> r.geturl()
'http://alice:[email protected]:80/%7Ealice/python.cgi?query=text#sample'
>>> r2=urlparse("www.pyton.or/about",'http')
>>> r2
ParseResult(scheme='http', netloc='', path='www.pyton.or/about', params='', query='', fragment='')

總結:

  1. 六元組中的每個值都是字符串,如果URL中不存在則爲空值。這裏網絡地址部分沒有進一步區分服務器地址和端口地址,而作爲一個字符串
  2. 解析URL時候,所有的%轉義符不會被處理。分隔符將會去掉,除了在路徑中的第一個起始斜線外。
  3. urlparse方法返回的對象中的屬性有scheme,netlocl,path,query(查詢部分),params(參數)。另外還有兩個可選參數,scheme和allow_fragments(指示是否可以對地址進行分片,默認值True)

    1.2、url的拼合

    >>> from urllib.parse import urljoin,urlsplit,urlunsplit #從模塊中直接引入方法
    >>> r=urljoin("http://www.baidu.com","ice.html") #包含有絕對url和相對url
    >>> r
    'http://www.baidu.com/ice.html'

    說明:

>>> help(urljoin)
Help on function urljoin in module urllib.parse:
urljoin(base, url, allow_fragments=True)
    Join a base URL and a possibly relative URL to form an absolute
    interpretation of the latter.

注意:當相對URL中如果有協議字段的話,則優先使用相對URL,否則使用絕對URL中協議字段。如:

>>> r=urljoin('http://www.python.org','ftp://www.python.org/faq')
>>> r                 #採用了後面相對地址協議值
'ftp://www.python.org/faq' 
>>> r=urljoin('http://www.python.org','www.python.org/faq')
>>> r               #當相對地址字符串不含有協議的時候,會默認爲字符串
'http://www.python.org/www.python.org/faq'
 >>>r=urljoin("http://www.python.org/faq","http://www.python.org/ask")    #絕對url和相對url中都含有服務器地址且不相同,則採用相對url地址的服務器地址和路徑
>>> r****
'http://www.python.org/ask'

1.3、url分解

urlsplit和urlparse類似,同樣接受一個字符串,然後給出一個五元組。僅比urlparse方法少了param參數,從而由六元組變成五元組。
>>> from urllib.parse import urlsplit
>>> urlsplit("http://www.python.org:80/faq.cgi?src=file")
SplitResult(scheme='http', netloc='www.python.org:80', path='/faq.cgi', query='src=file', fragment='')  #也反映了網絡的變化

而urlunsplit方法則是urlsplit的反向方法。是將通過urlsplit生成的的splitresult對象組合成一個URL字符串。這連個方法組合在一起可以有效地格式化URL,特殊字符可以在這個過程中得到轉換

>>> >>> from urllib.parse import urlunsplit
>>> r=urlunsplit(("http","www.python.org","faq","","")) #傳進的參數是一個五元組,也就是一個rulunsplit對象。
>>> r
'http://www.python.org/faq'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章