<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
urllib
模組是 Python 標準庫,其價值在於抓取網路上的 URL 資源,入門爬蟲時必學的一個模組。
不過更多的爬蟲工程師上手學習的模組已經更換為 requests 了。
在 Python3 中 urllib 模組包括如下內容。
urllib.request
:請求模組,用於開啟和讀取 URL;urllib.error
:例外處理模組,捕獲 urllib.error
丟擲異常;urllib.parse
:URL 解析,爬蟲程式中用於處理 URL 地址;urllib.robotparser
:解析 robots.txt 檔案,判斷目標站點哪些內容可爬,哪些不可以爬,但是用的很少。開啟一個測試站點,然後返回伺服器響應內容。
from urllib.request import urlopen with urlopen('https://www.example.net') as html: page = html.read() print(page)
上述程式碼用到了 urllib.requests
模組,其內部定義了開啟 URL 的函數,授權驗證的方法,重定向,cookie 操作等方法。
程式碼中用到的 urlopen()
函數,就是開啟一個 URL,該函數的語法格式如下所示:
urllib.request.urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None)
引數描述如下所示:
url
:請求地址;data
:傳送到伺服器的其他資料物件,預設為 None;timeout
:超時時間;cafile
和 capath
:cafile 為 CA 證書, capath 為 CA 證書的路徑,使用 HTTPS 需要用到;context
:ssl.SSLContext 型別,用來指定 SSL 設定。呼叫該物件的 read()
方法,可以讀取到整個網頁資料。
其餘的函數與檔案讀取類似,分別是 readline()
,readlines()
。
還可以呼叫物件的 getcode()
方法,獲取網頁狀態碼。
print(html.getcode()) # 返回 200
使用 urlopen()
可以得到一個 HTTPResposne
型別的物件,它包括上文提及的 read()
方法,getcode()
方法,除此之外,還有如下內容可以使用。
getheaders()
:獲取請求頭內容;getheader(name)
:獲取指定請求頭;msg
:資訊屬性;version
:版本屬性;status
:狀態屬性。URL 請求抽象類,使用它可以擴充套件更多的請求設定,其構造方法如下所示:
def __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
其引數說明如下所示:
url
:請求地址,必選引數;data
:請求引數,必須為 bytes
型別資料,可以使用 urlencode()
進行編碼;headers
:字典型別,請求頭設定;origin_req_host
:請求的主機地址,IP 或域名;method
:請求方法。測試程式碼如下所示:
from urllib import request, parse url = 'http://httpbin.org/post' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 你的UA' } dict = { 'name': 'xiangpica' } # 轉換資料型別 data = bytes(parse.urlencode(dict), encoding='utf8') # 範例化物件 req = request.Request(url=url, data=data, headers=headers, method='POST') # 新增請求頭 req.add_header('HOST', 'httpbin.org') # 傳送資料 response = request.urlopen(req) print(response.read().decode('utf-8'))
該模組主要用於解析 URL,函數原型如下所示:
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
引數說明如下:
urlstring
:URL 地址;scheme
:協定型別,可用的包括 file、ftp、gopher、hdl、http、https、imap、mailto、 mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、 sip、sips、snews、svn、svn+ssh、telnet……;allow_fragments
:是否忽略 URL 中的 fragment
部分。標準的 URL 格式如下:
scheme://netloc/path;params?query#fragment
說明如下所示:
scheme
:URL 協定;netloc
:域名和埠;path
:路徑;params
:最後一個路徑元素引數,不常用;query
:查詢字串;fragment
:片段標誌。from urllib.parse import urlparse result = urlparse('http://www.example.com/index.html;info?id=10086#comment') print(type(result), result) print(result.scheme, result[0]) print(result.netloc, result[1]) print(result.path, result[2]) print(result.params, result[3]) print(result.query, result[4]) print(result.fragment, result[5])
執行結果如下所示:
<class 'urllib.parse.ParseResult'> ParseResult(scheme='http', netloc='www.example.com', path='/index.html', params='info', query='id=10086', fragment='comment')
http http
www.example.com www.example.com
/index.html /index.html
info info
id=10086 id=10086
comment comment
urlparse() 返回結果是一個
ParseResult
型別的物件。
其餘內容
urlunparse()
方法與上述方法邏輯相反;urljoin()
方法用於拼接連結;urlencode()
:格式化請求引數;quote()
:將內容轉換為 URL 編碼格式,尤其是轉換中文字元;unquote()
:對 URL 進行解碼。在 urllib
中,error
模組定義異常,其包含如下類:
URLError
:OSError 的一個子類,用於處理程式在遇到問題時會引發此異常;HTTPError
:URLError 的一個子類,用於處理特殊 HTTP 錯誤例如作為認證請求的時候到此這篇關於Python技能樹共建之python urllib 模組的文章就介紹到這了,更多相關 python urllib 模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45