urllib之解析鏈結

2021-09-25 10:19:23 字數 2641 閱讀 3730

from urllib.parse import urlparse

# 可以傳入三個引數urlstring,scheme(預設協議),allow_fragments是忽略fragment,設定為false,則fragment部分會被忽略,它會被解析為path、params或者query的一部分,而fragment部分為空

result = urlparse(

"")print

(type

(result)

,result,sep=

"\n"

)

得到結果

)其中:scheme為協議,netloc為網域名稱,後面是path路徑,再是引數,問好後面是查詢條件,一般用作get型別的url,# 後面是錨點,用於直接定位頁面內部的下拉位置。

得到的result為乙個元組,可以用result.scheme,result[0]來獲取值

接收的引數是乙個可迭代物件,長度必須是6,否則會丟擲異常

)得到乙個完整的url字串

與urlparse()相似,不再單獨解析params這部分,只返回5個結果

result = urlsplit(

"")print

(type

(result)

,result,sep=

"\n"

)

結果splitresult(scheme='https', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')

將各部分組合成完整的鏈結,傳入的引數也是乙個可迭代物件,長度必須為5

我們提供乙個基礎鏈結base_url作為第乙個引數,將新的鏈結作為第二個引數,該方法會分析base_url的scheme(協議)、netloc(網域名稱)和path(路徑)這3個內容並對新鏈結缺失部分進行補充,最後返回結果。

from urllib.parse import urljoin

urljoin(

"","index.html"

)

base_url提供三項內容,scheme,netloc和path,如果這三項在新鏈結裡不存在,就予以補充,如果新鏈結存在,就使用新鏈結,而base_url中的params、query、fragment是不起作用的

在構造get請求的時候非常有用,將字典引數轉換為get的請求引數

from urllib.parse import urlencode,urljoin

data =

base_url =

""print

(urljoin(base_url,

"?"+urlencode(data)

))

將get請求引數轉回字典

from urllib.parse import parse_qs

# 將查詢字串轉換為字典

str=

"name=wang;age=3"

print

(parse_qs(

str)

)parse_qsl(

)# 將查詢字串轉換為列表套元組

from urllib.parse import parse_qsl

print

(parse_qsl(

str)

)

將內容轉換為url編碼格式,url中帶有中文引數時,有可能會導致亂碼問題,此時用這個方法可以將中文轉換為url編碼

from urllib.parse import quote

name =

"汪"url =

"?name="

+quote(name)

print

(url)

# 得到?name=%e6%b1%aa

對url進行解碼

from urllib.parse import unquote

url =

"?name=%e6%b1%aa"

鏈結之符號解析

之前寫過一篇部落格講述了鏈結的來由 這篇部落格則打算講講鏈結的核心工作 符號解析和重定位。看這篇部落格之前可能需要一點基礎,大家可以先看看我上面的鏈結的文章,再來看這篇。什麼是符號解析?符號解析分為區域性符號解析和全域性符號解析,區域性的不用說。全域性符號解析因為多個目標檔案可能會定義相同的名字的全...

爬蟲之urllib庫

一 urllib的基本使用 import urllib.request response urllib.request.urlopen 獲取當前爬取網頁的狀態碼 print response.getcode decode 解碼 位元組資料轉成字串資料 data response.read decod...

爬蟲庫之urllib

官方文件 utllib是python內建的http請求庫 包含一下模組 相比與python的變化 python2 import urllib2 response urllib2.urlopen python3 import urlib.request response urllib.request....