Python網(wǎng)絡(luò)請(qǐng)求模塊urllib與requests使用介紹
Python 網(wǎng)絡(luò)請(qǐng)求模塊 urllib 、requests
Python 給人的印象是抓取網(wǎng)頁(yè)非常方便,提供這種生產(chǎn)力的,主要依靠的就是 urllib、requests這兩個(gè)模塊。
urlib 介紹
- urllib.request 提供了一個(gè) urlopen 函數(shù),來(lái)實(shí)現(xiàn)獲取頁(yè)面。支持不同的協(xié)議、基本驗(yàn)證、cookie、代理等特性。
- urllib 有兩個(gè)版本 urllib 以及 urllib2。
- urllib2 能夠接受 Request 對(duì)象,urllib 則只能接受 url。
- urllib 提供了 urlencode 函數(shù)來(lái)對(duì)GET請(qǐng)求的參數(shù)進(jìn)行轉(zhuǎn)碼,urllib2 沒有對(duì)應(yīng)函數(shù)。
- urllib 拋出了 一個(gè) URLError 和一個(gè) HTTPError 來(lái)處理客戶端和服務(wù)端的異常情況。
Requests 介紹
Requests 是一個(gè)簡(jiǎn)單易用的,用Python編寫的HTTP庫(kù)。這個(gè)庫(kù)讓我們能夠用簡(jiǎn)單的參數(shù)就完成HTTP請(qǐng)求,而不必像 urllib 一樣自己指定參數(shù)。同時(shí)能夠自動(dòng)將響應(yīng)轉(zhuǎn)碼為Unicode,而且具有豐富的錯(cuò)誤處理功能。
- International Domains and URLs
- Keep-Alive & Connection Pooling
- Sessions with Cookie Persistence
- Browser-style SSL Verification
- Basic/Digest Authentication
- Elegant Key/Value Cookies
- Automatic Decompression
- Unicode Response Bodies
- Multipart File Uploads
- Connection Timeouts
- .netrc support
- List item
- Python 2.6—3.4
- Thread-safe
以下為一些示例代碼,本文環(huán)境為 Python 3.6
無(wú)需參數(shù)直接請(qǐng)求單個(gè)頁(yè)面
import urllib from urllib.request import request from urllib.urlopen import urlopen # import urllib2 import requests # 使用 urllib 方式獲取 response = urllib.request.urlopen('http://www.baidu.com') # read() 讀取的是服務(wù)器的原始返回?cái)?shù)據(jù) decode() 后會(huì)進(jìn)行轉(zhuǎn)碼 print(response.read().decode()) # 使用 requests 方式獲取 # request 模塊相比 resp = requests.get('http://www.baidu.com') print(resp) print(resp.text)
HTTP 是基于請(qǐng)求和響應(yīng)的工作模式,urllib.request 提供了一個(gè) Request 對(duì)象來(lái)代表請(qǐng)求,因此上面的代碼也可以這么寫
req = urllib.request.Request('http://www.baidu.com') with urllib.request.urlopen(req) as response: print(response.read())
Request對(duì)象可以增加header信息
req = urllib.request.Request('http://www.baidu.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 urllib.request.urlopen(req) as response: print(response.read())
或者直接將 header 傳入 Request 構(gòu)建函數(shù)。
帶參數(shù)的 GET 請(qǐng)求
帶有參數(shù)的請(qǐng)求和上面的例子本質(zhì)一樣,可以事先拼出URL請(qǐng)求字符串,然后再進(jìn)行請(qǐng)求。
本例使用了 騰訊 的股票API,可以傳入不同的股票代碼以及日期,查詢對(duì)應(yīng)股票在對(duì)應(yīng)時(shí)間的價(jià)格、交易信息。
# 使用帶參數(shù)的接口訪問(wèn) tencent_api = "http://qt.gtimg.cn/q=sh601939" response = urllib.request.urlopen(tencent_api) # read() 讀取的是服務(wù)器的原始返回?cái)?shù)據(jù) decode() 后會(huì)進(jìn)行轉(zhuǎn)碼 print(response.read()) resp = requests.get(tencent_api) print(resp) print(resp.text)
發(fā)送 POST 請(qǐng)求
urllib 沒有單獨(dú)區(qū)分 GET 和 POST 請(qǐng)求的函數(shù),只是通過(guò) Request 對(duì)象是否有 data 參數(shù)傳入來(lái)判斷。
import urllib.parse import urllib.request url = 'http://www.someserver.com/cgi-bin/register.cgi' values = {'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'Python' } data = urllib.parse.urlencode(values) data = data.encode('ascii') # data should be bytes req = urllib.request.Request(url, data) with urllib.request.urlopen(req) as response: the_page = response.read()
到此這篇關(guān)于Python網(wǎng)絡(luò)請(qǐng)求模塊urllib與requests使用介紹的文章就介紹到這了,更多相關(guān)Python urllib與requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python用tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)易能進(jìn)行隨機(jī)點(diǎn)名的界面
這篇文章主要介紹了python用tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)易能進(jìn)行隨機(jī)點(diǎn)名的界面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09selenium?UI自動(dòng)化實(shí)戰(zhàn)過(guò)程記錄
如果大家有做過(guò)web的自動(dòng)化測(cè)試,相信對(duì)于selenium一定不陌生,測(cè)試人員經(jīng)常使用它來(lái)進(jìn)行自動(dòng)化測(cè)試,下面這篇文章主要給大家介紹了關(guān)于selenium?UI自動(dòng)化實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考下2021-12-12深入理解python?生成器、迭代器、動(dòng)態(tài)新增屬性及方法
這篇文章主要介紹了python?生成器、迭代器、動(dòng)態(tài)新增屬性及方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Python pandas.DataFrame調(diào)整列順序及修改index名的方法
這篇文章主要介紹了Python pandas.DataFrame調(diào)整列順序及修改index名的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python?sklearn預(yù)測(cè)評(píng)估指標(biāo)混淆矩陣計(jì)算示例詳解
這篇文章主要為大家介紹了Python?sklearn預(yù)測(cè)評(píng)估指標(biāo)混淆矩陣計(jì)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02教你怎么用Python處理excel實(shí)現(xiàn)自動(dòng)化辦公
這篇文章主要介紹了教你怎么用Python處理excel實(shí)現(xiàn)自動(dòng)化辦公,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04淺談基于Pytest框架的自動(dòng)化測(cè)試開發(fā)實(shí)踐
Pytest是Python的一種易用、高效和靈活的單元測(cè)試框架,本文主要介紹了基于Pytest框架的自動(dòng)化測(cè)試開發(fā)實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12基于Python Shell獲取hostname和fqdn釋疑
一直以來(lái)被linux的hostname和fqdn(Fully Qualified Domain Name)困惑著,今天通過(guò)腳本之家平臺(tái)把它們使用細(xì)節(jié)弄清分享給大家2016-01-01