Python3 urllib使用
阿新 • • 發佈:2018-11-20
Python3 urllib使用
基本使用 get,post,timeout超時,異常
# 姓名: 劉帥 # 日期: 2018.11.18 # 功能: urllib.request.urlopen使用方法 from urllib.request import urlopen # 請求網頁 from urllib.parse import urlencode # 字典轉字串轉碼 from urllib.error import URLError # URLError錯誤 def urlA(): # GET請求 res = urlopen('http://www.baidu.com') # 開啟指定url print(res.read().decode('utf8')) # 輸出響應內容 print(type(res)) # 輸出函式返回資料型別 print(res.status) # 輸出響應狀態碼 print(res.getheaders()) # 輸出響應頭 print(res.getheader('Server')) # 輸出響應頭Server內容 伺服器資訊 return def urlB(): # POST請求 dataA = {'word': 'hello'} # 定義post內容 引數word 值hello dataB = urlencode(dataA) # 轉化為字串 new_data = bytes(dataB, encoding='utf-8') # 轉碼為位元組流 res = urlopen('http://httpbin.org/post', data=new_data) # post請求 new_data為post資料 print(res.read().decode('utf-8')) # 輸出響應內容 return def urlC(): # 設定timeout超時時間 try: # 異常處理 res = urlopen('http://httpbin.org/', timeout=0.1) # 開啟指定url, 設定超時時間0.1秒 超時跑出異常 except URLError as err: # 異常處理方法 print(err.reason) else: # 未丟擲異常則執行 print(res.read().decode('utf8')) # 輸出響應內容 print(type(res)) # 輸出函式返回資料型別 print(res.status) # 輸出響應狀態碼 print(res.getheaders()) # 輸出響應頭 print(res.getheader('Server')) # 輸出響應頭Server內容 伺服器資訊 return
Requset使用 get,post,驗證,代理,Cookie儲存讀取,異常
# 姓名: 劉帥 # 日期: 2018.11.18 # 功能: urllib.request.Requset使用方法 from urllib.parse import urlencode # 字典轉字串轉碼 from urllib.request import Request # Request類 from urllib.request import urlopen # 請求網頁 from urllib.request import URLError # URLError錯誤 from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener # 驗證 from urllib.request import ProxyHandler # HTTP代理 from http.cookiejar import CookieJar from http.cookiejar import MozillaCookieJar from http.cookiejar import LWPCookieJar from urllib.request import HTTPCookieProcessor from urllib.request import HTTPError def urlA(): # get請求 req = Request('http://httpbin.org/get') # 建立填充Requset類 res = urlopen(req) # 通過Requset類請求網頁 print(res.read().decode('utf-8')) # 輸出響應內容 return def urlB(): # post請求 headersA = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36' ' (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 'Host': 'httpbin.org'} dataA = {'word': 'hello'} # 定義字典 引數word 值hello dataB = urlencode(dataA) # 轉化為字串 dataC = bytes(dataB, encoding='utf-8') # 轉碼為位元組流 req = Request(url='http://httpbin.org/post', headers=headersA, data=dataC, method='POST') # 建立填充Requset類 data為post內容 headers為請求頭 method請求方式 # req.add_header('Host', 'httpbin.org') # 通過add_headers新增請求頭 res = urlopen(req) # 通過Requset類請求網頁 print(res.read().decode('utf-8')) # 輸出響應內容 return def urlC(): # 驗證 username = 'LiuShuai' # 使用者名稱 password = 'Ls123456' # 使用者密碼 url = 'http://www.httpbin.org/basic-auth/LiuShuai/Ls123456' # url網址 p = HTTPPasswordMgrWithDefaultRealm() # 建立HTTPPasswordMgrWithDefaultRealm物件 p.add_password(None, url, username, password) # 使用add_password新增賬號密碼 auth_handler = HTTPBasicAuthHandler(p) # 建立HTTPBasicAuthHandler物件 引數HTTPPasswordMgrWithDefaultRealm opener = build_opener(auth_handler) # 構建Opener try: # 異常處理 res = opener.open(url) # 開啟連線完成驗證返回登入後的頁面 except URLError as err: # 異常處理方法 print(err.reason) else: # 未丟擲異常執行 print(res.read().decode('utf-8')) # 輸出返回內容 return def urlD(): # 代理 url = 'http://httpbin.org/get' # url網址 proxy = {'http': 'http://111.202.37.195:38431', 'https': 'https://111.202.37.195:38431'} # 代理字典 proxy_handler = ProxyHandler(proxy) # 通過ProxyHandler使用字典生成handler opener = build_opener(proxy_handler) # 構造opener try: # 異常處理 res = opener.open(url) # 開啟網址 except URLError as err: # 異常處理方法 print(err.reason) else: # 未異常則執行 print(res.read().decode("utf-8")) # 輸出返回內容 return def urlE(): # Cookie 普通使用, 無法儲存或讀取檔案 cookie = CookieJar() # 建立CookieJar類 無法儲存或讀取檔案 handler = HTTPCookieProcessor(cookie) # 構建handler opener = build_opener(handler) # 構建opener try: # 異常處理 res = opener.open('http://www.baidu.com') # 開啟連線 except URLError as err: # 異常處理方法 print(err.reason) else: # 未異常則執行 for cke in cookie: # 迴圈輸出cookie 的key value print(cke.name, cke.value) # 迴圈輸出cookie 的key value return def urlF(): # Cookie 高階使用, 可以儲存或讀取檔案 cookie = MozillaCookieJar('1.txt') # 建立MozillaCookieJar類 可以儲存或讀取檔案 傳入檔名 cookie.load('1.txt', ignore_expires=True, ignore_discard=True) # 讀取cookie檔案 handler = HTTPCookieProcessor(cookie) # 構建handler opener = build_opener(handler) # 構建opener try: # 異常處理 res = opener.open('http://www.baidu.com') # 開啟連線 except URLError as err: # 異常處理方法 print(err.reason) else: # 未異常則執行 cookie.save(ignore_discard=True, ignore_expires=True) # 儲存cookie檔案 for cke in cookie: # 迴圈輸出cookie 的key value print(cke.name, cke.value) # 迴圈輸出cookie 的key value return def urlG(): # Cookie 高階使用, 可以儲存或讀取檔案 cookie = LWPCookieJar('1.txt') # 建立LWPCookieJar類 可以儲存或讀取檔案 傳入檔名 cookie.load('1.txt', ignore_expires=True, ignore_discard=True) # 讀取cookie檔案 handler = HTTPCookieProcessor(cookie) # 構建handler opener = build_opener(handler) # 構建opener try: # 異常處理 res = opener.open('http://www.baidu.com') # 開啟連線 except URLError as err: # 異常處理方法 print(err.reason) else: # 未異常則執行 cookie.save(ignore_discard=True, ignore_expires=True) # 儲存cookie檔案 for cke in cookie: # 迴圈輸出cookie 的key value print(cke.name, cke.value) # 迴圈輸出cookie 的key value return def urlH(): # 異常捕獲處理 try: res = urlopen('http://cuiqingcai.com/index.htm') # 開啟一個不存在的頁面 丟擲Not Found 404 except HTTPError as err: # 異常處理方法 先捕獲HTTPError print(err.reason, err.code, err.headers) except URLError as err: # 異常處理方法 再捕獲HTTPError print(err.reason) else: # 未異常則執行 print(res.read().decode('utf-8')) # 輸出請求到的內容 return
parse使用 url分割合併,構建get引數,get引數轉換為列表或元組,字串轉url編碼
# 姓名: 劉帥 # 日期: 2018.11.18 # 功能: urllib.parse使用方法 from urllib.parse import urlparse # 分解url為6個數據的元組 from urllib.parse import urlunparse # 使用6個數據的元組構造url from urllib.parse import urlsplit # 分解url為5個數據的元組 忽略params from urllib.parse import urlunsplit # 使用5個數據的元組構造url 忽略params from urllib.parse import urljoin # url分解合併 from urllib.parse import urlencode # 構造GET引數 from urllib.parse import parse_qs # GET引數轉回字典 from urllib.parse import parse_qsl # GET引數轉為元組組成的列表 from urllib.parse import quote # 將內容轉化為url編碼格式 from urllib.parse import unquote # 將url編碼內容轉化為普通字元 def urlA(): # urlparse使用方法 返回6個數據的元組 res = urlparse('http://www.baidu.com/index.html;user?id=5#comment') # 傳入url print(type(res)) # 輸出變數型別<class 'urllib.parse.ParseResult'> print(res) # 輸出url分解分段內容 return def urlB(): # urlparse的scheme引數使用方法 返回6個數據的元組 res = urlparse('www.baidu.com/index.html;user?id=5#comment', scheme='http') # 傳入url scheme傳入協議型別 print(type(res)) # 輸出變數型別<class 'urllib.parse.ParseResult'> print(res) # 輸出url分解分段內容 return def urlC(): # urlparse的fragments引數使用方法 返回6個數據的元組 res = urlparse('www.baidu.com/index.html;user?id=5#comment', allow_fragments=False) # 傳入url allow_fragments傳入是否忽略fragments print(type(res)) # 輸出變數型別<class 'urllib.parse.ParseResult'> print(res) # 輸出url分解分段內容 fragments為空 return def urlD(): # urlparse不包含 params query,並且忽略fragments 返回6個數據的元組 res = urlparse('www.baidu.com/index.html;user?id=5#comment', allow_fragments=False) # 傳入url allow_fragments傳入是否忽略fragments print(type(res)) # 輸出變數型別<class 'urllib.parse.ParseResult'> print(res) # 輸出url分解分段內容 fragments params query為空 return def urlE(): # urlparse,返回變數的使用方法 獲取 返回6個數據的元組 res = urlparse('http://www.baidu.com/index.html;user?id=5#comment') # 傳入url print(type(res)) # 輸出變數型別<class 'urllib.parse.ParseResult'> print(res.scheme, res[0], res.netloc, res[1]) # 輸出返回內容 return def urlF(): # url的構造 許6個數據的可迭代資料 data = ['http', 'www.baidu', 'index.html', 'user', 'a=6', 'comment'] # 初始化列表 res = urlunparse(data) # 根據元組構造url print(res) # 輸出構造結果 return def urlG(): # urlsplitd的使用方法 忽略params合併進path內 res = urlsplit('http://www.baidu.com/index.html;user?id=5#comment') # 分解返回url 返回5個數據的元組 print(type(res)) # 輸出變數型別<class 'urllib.parse.SplitResult'> print(res) # 輸出返回內容 print(res.scheme, res[0], res.netloc, res[1]) # 輸出返回內容 使用key或下標 獲取 return def urlH(): data = ['http', 'www.baidu.com', '/index.html;user', 'id=5', 'comment'] res = urlunsplit(data) print(res) return def urlI(): # urljoin使用 print(urljoin('http://www.baidu.com', 'FAQ.html')) print(urljoin('http://www.baidu.com', 'https://cuiqingcai.com/FAQ.html')) print(urljoin('http://www.baidu,com/about.html', 'https://cuiqingcai/FAQ.html')) print(urljoin('http://www.baidu,com/about.html', 'http://cuiqingcai/FAQ.html?question=2')) print(urljoin('http://baidu.com?wd=abc', 'https://cuiqingcai/index.php')) print(urljoin('http://www.baidu.com', '?category=2#comment')) print(urljoin('www.baidu.com', 'category=2#comment')) print(urljoin('www.baidu.com#comment', '?category=2')) return def urlJ(): # 使用urlencode,構建GET引數 params = {'name': 'LiuShuai', 'age': '55'} # get引數 引數key 值valude base_url = 'http://www.baidu.com?' # 網址基址 url = base_url + urlencode(params) # 連線url與引數 print(url) # 輸出完整url return def urlK(): # GET引數的使用轉換列表 元組 query = 'name=LiuShuai&age=55' # 建立一個get引數 print(parse_qs(query)) # GET引數轉回字典 print(parse_qsl(query)) # GET引數轉為元組組成的列表 return def urlL(): # 使用quote將字串轉化為url編碼格式 word = '桌布' # 定義字串 url = 'http://www.baidu.com/s?wd=' + quote(word) # 將字串轉化為url編碼格式 print(url) # 輸出轉化url編碼格式合併後的url url = unquote(url) # 將url轉化為普通字串 print(url) # 輸出轉化為普通字串的url return