摘要:本系列以為基礎是的標準網絡請求庫。包含了網絡數據請求,處理改變請求頭和用戶代理,重定向,認證等的函數。超時單位為秒參數必須是的實例返回值返回一個可以作為的對象。返回的個部分,分別是機制網絡位置路徑路徑段參數查詢片段。
本系列以python3.4為基礎
urllib是Python3的標準網絡請求庫。包含了網絡數據請求,處理cookie,改變請求頭和用戶代理,重定向,認證等的函數。
urllib與urllib2?:python2.x用urllib2,而python3改名為urllib,被分成一些子模塊:urllib.request,urllib.parse,urllib.error,urllib.robotparser.盡管函數名稱大多和原來一樣,但是使用新的urllib庫時需要注意哪些函數被移動到子模塊里了。
HTTP版本:HTTP/1.1,包含Connection:close 頭
特別常用的函數:urllib.request.urlopen()
同類型開源庫推薦:requests
urllib:用來處理網絡請求和操作url。有以下子模塊
urllib.request 打開后讀取url內容
urllib.error 包含由urllib.request拋出的異常類
urllib.parse 解析URL
urllib.robotparser 解析robots.txt files
簡單的例子from urllib.request import urlopen html=urlopen("https://www.baidu.com") print(html.geturl(),html.info(),html.getcode(),sep=" ") print(html.read().decode("UTF-8"))
from urllib import request with request.urlopen("https://api.douban.com/v2/book/2129650") as f: data = f.read() print("Status:", f.status, f.reason) for k, v in f.getheaders(): print("%s: %s" % (k, v)) print("Data:", data.decode("utf-8"))
from urllib import request req = request.Request("http://www.douban.com/") #設置請求頭 req.add_header("User-Agent", "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25") with request.urlopen(req) as f: print("Status:", f.status, f.reason) for k, v in f.getheaders(): print("%s: %s" % (k, v)) print("Data:", f.read().decode("utf-8")) import urllib.request data = parse.urlencode([ #進行url編碼參數 ("username", "xby")] req = urllib.request.Request(url="https://www.baidu.com", data=data) with urllib.request.urlopen(req) as f: print(f.read().decode("utf-8")) from urllib import request, parse print("Login to weibo.cn...") email = input("Email: ") passwd = input("Password: ") login_data = parse.urlencode([ #進行url編碼參數 ("username", email), ("password", passwd), ("entry", "mweibo"), ("client_id", ""), ("savestate", "1"), ("ec", ""), ("pagerefer", "https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F") ]) req = request.Request("https://passport.weibo.cn/sso/login") req.add_header("Origin", "https://passport.weibo.cn") req.add_header("User-Agent", "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25") req.add_header("Referer", "https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F") with request.urlopen(req, data=login_data.encode("utf-8")) as f: print("Status:", f.status, f.reason) for k, v in f.getheaders(): print("%s: %s" % (k, v)) print("Data:", f.read().decode("utf-8")) urllib.request urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
url參數可以是字符串或者urllib.request.Request對象
data參數必須是字節形式。可以通過from urllib import parse parse.urlencode()來處理得到。如果沒有提供dat參數則為GET請求,否則為POST請求。
[tomeout,]超時單位為秒
context參數必須是ssl.SSLContext的實例
返回值:返回一個可以作為contextmanager的對象。它有一些方法和屬性:
geturl()
info()-元數據信息,比如headers
getcode()-http響應碼,比如200
read()-獲取內容,字節形式
status
reason
對于Http(s)請求,返回的一個http.client.HTTPResponse對象。常用方法getheaders(),read()
對于ftp,file請求,返回一個urllib.response.addinfourl對象
可能拋出的異常urllib.error.URLError,urllib.error.HTTPError
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
通過這個對象我們可以設置請求數據,添加請求頭,同時可以獲取一些url信息:比如協議類型,主機。也可以設置代理Request.set_proxy(host, type)
class urllib.request.OpenerDirector以及關聯的urllib.request.install_opener(opener),urllib.request.build_opener([handler, …])
方法:OpenerDirector.add_handler(handler) ,這個handler對象必須繼承urllib.request.BaseHandler,常見的有
urllib.request.BaseHandler -基類
urllib.request.HTTPDefaultErrorHandler
urllib.request.HTTPRedirectHandler
urllib.request.HTTPCookieProcessor
urllib.request.ProxyHandler
urllib.request.HTTPBasicAuthHandler
urllib.request.HTTPSHandler
例子:
import urllib.request # Create an OpenerDirector with support for Basic HTTP Authentication... auth_handler = urllib.request.HTTPBasicAuthHandler() auth_handler.add_password(realm="PDQ Application", uri="https://mahler:8092/site-updates.py", user="klem", passwd="kadidd!ehopper") opener = urllib.request.build_opener(auth_handler) # ...and install it globally so it can be used with urlopen. urllib.request.install_opener(opener) urllib.request.urlopen("http://www.example.com/login.html")
proxy_handler = urllib.request.ProxyHandler({"http": "http://www.example.com:3128/"}) proxy_auth_handler = urllib.request.ProxyBasicAuthHandler() proxy_auth_handler.add_password("realm", "host", "username", "password") opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler) # This time, rather than install the OpenerDirector, we use it directly: opener.open("http://www.example.com/login.html")異常處理
可能拋出的異常urllib.error.URLError,urllib.error.HTTPError
exception urllib.error.URLError :有以下屬性:reason
exception urllib.error.HTTPError 它是URLError的一個子類,有以下屬性:
code
reason
headers
from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError req = Request("http://www.baidu.com/") try: response = urlopen(req) except HTTPError as e: print("Error code: ", e.code) except URLError as e: print("We failed to reach a server.") print("Reason: ", e.reason) else: print("good!") print(response.read().decode("utf8"))urllib.parse
urllib.parse.urlparse函數會將一個普通的url解析為6個部分,返回的數據類型為ParseResult對象,通過訪問其屬性可以獲取對應的值。
同時,它還可以將已經分解后的url再組合成一個url地址(通過urlunparse(parts))。返回的6個部分,分別是:scheme(機制)、netloc(網絡位置)、path(路徑)、params(路徑段參數)、query(查詢)、fragment(片段)。
urllib.parse.urlencode(query, doseq=False, safe=" ", encoding=None, errors=None),注意:query參數是一個序列對象
通過urllib.request.urlretrieve下載文件urllib.request.urlretrieve(url,savefilepath)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44227.html
摘要:利用標準庫中的的模塊可以將對象轉換為一種可以傳輸或存儲的格式。主要方法模塊中有兩個主要函數,它們是和。具體語法為返回一個字符串,而不是存入文件中。該方法用于反序列化,即將序列化的對象重新恢復成對象。除此之外,這兩個模塊的接口是幾乎完全相同。 對象存在于程序運行時的內存中,當程序不再運行時或斷電關機時,這些對象便不再存在。我現在想把對象保存下來,方便以后使用,這就是持久化技術。利用 py...
摘要:模塊里有兩個非常重要的分別是和。返回一個對象,它包括文件的詳細信息。將文檔內的指定文件解壓到當前目錄。為文件路徑,為添加到文檔之后保存的名稱參數表示壓縮方法,它的值可以是或。預留字段,當前實現總是返回。 ZipFile模塊里有兩個非常重要的class, 分別是 ZipFile和ZipInfo。ZipFile是主要的類,用來創建和讀取zip文件,而ZipInfo是存儲的zip文件的每個文...
摘要:運行結果片段發現密碼的返回長度與其他不同,獲得密碼,爆破成功。源碼分析加入了對登錄失敗次數做限制,防止爆破用了更為安全的機制防御注入 BurpSuite-Intruder筆記 Burp intruder是一個強大的工具,用于自動對Web應用程序自定義的攻擊。它可以用來自動執行所有類型的任務您的測試過程中可能出現的 模塊說明 Target 用于配置目標服務器進行攻擊的詳細信息 Posi...
摘要:上一篇文章網絡爬蟲實戰使用處理異常下一篇文章網絡爬蟲實戰使用分析協議庫里還提供了這個模塊,它定義了處理的標準接口,例如實現各部分的抽取,合并以及鏈接轉換。上一篇文章網絡爬蟲實戰使用處理異常下一篇文章網絡爬蟲實戰使用分析協議 上一篇文章:Python3網絡爬蟲實戰---21、使用Urllib:處理異常下一篇文章:Python3網絡爬蟲實戰---23、使用Urllib:分析Robots協議...
摘要:是回調函數,當鏈接服務器和相應數據傳輸完畢時觸發本函數可選。僅僅是針對的,在中,已經沒有這個模塊了,取代它的是。由于以流式讀取文件,從而速度較快,切少占用內存,但是操作上稍復雜,需要用戶實現回調函數。 編寫模塊 模塊是程序 模塊就是一個擴展名為.py的Python程序。 編寫模塊 #!/usr/bin/env python # coding=utf-8 lang = python 引...
閱讀 1026·2021-11-23 09:51
閱讀 2344·2021-10-08 10:22
閱讀 2544·2021-09-29 09:35
閱讀 855·2021-09-22 15:20
閱讀 2859·2019-08-30 15:53
閱讀 2413·2019-08-30 13:55
閱讀 1097·2019-08-29 17:27
閱讀 2870·2019-08-29 17:26