Python爬蟲學(xué)習(xí)之requests的使用教程
requests庫簡(jiǎn)介
requests 庫是一個(gè)常用的用于 http 請(qǐng)求的模塊,它使用 python 語言編寫,可以方便的對(duì)網(wǎng)頁進(jìn)行爬取,是學(xué)習(xí) python 爬蟲的較好的http請(qǐng)求模塊。 它基于 urllib 庫,但比 urllib 方便很多,能完全滿足我們 HTTP 請(qǐng)求以及處理 URL 資源的功能。
requests庫安裝
如果已經(jīng)安裝了 anaconda
,就已經(jīng)自帶了 requets 庫
(建議新手安裝 Python 的話直接安裝 anaconda
就好了,可以省去很多繁瑣的安裝過程的)。如果確實(shí)沒有安裝,可以通過以下兩種方式來進(jìn)行安裝
1、pip命令安裝
在有pip的情況下直接客戶端輸入命令下載
pip install requests
2、下載代碼進(jìn)行安裝
由于 pip 命令可能安裝失敗所以有時(shí)我們要通過下載第三方庫文件來進(jìn)行安裝。
在 github
上的地址為:https://github.com/requests/requests
下載文件到本地之后,解壓到 python 安裝目錄。
之后打開解壓文件,在此處運(yùn)行命令行并輸入:
python setup.py install
即可。
之后我們測(cè)試 requests 模塊是否安裝正確,在交互式環(huán)境中輸入
import requests
如果沒有任何報(bào)錯(cuò),說明requests
模塊我們已經(jīng)安裝成功了
requests庫的使用
發(fā)送請(qǐng)求
在時(shí)用requests庫要導(dǎo)入requests模塊
import requests
接下來我們就可以嘗試獲取某個(gè)頁面
import requests r = requests.get('http://www.baidu.com') print(r.text)
現(xiàn)在,我們有一個(gè)名為 r 的 Response 對(duì)象。我們可以從這個(gè)對(duì)象中獲取所有我們想要的信息
除了get請(qǐng)求我們還有PUT,DELETE,HEAD 以及 OPTIONS 這些http請(qǐng)求方式
接下來我們先看看get請(qǐng)求
get請(qǐng)求
上面的例子就是我們用get方法獲取到了百度的首頁,并且輸出打印結(jié)果為
<!DOCTYPE html>
<!--STATUS OK--><html> <head>......</body> </html>
Requests 允許你使用 ?params? 關(guān)鍵字參數(shù),以一個(gè)字符串字典來提供這些參數(shù)。舉例來說,如果你想傳遞 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你可以使用如下代碼:
payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://httpbin.org/get", params=payload)
通過print(r.url),可以打印輸出URL
http://httpbin.org/get?key2=value2&key1=value1
注意字典里值為 ?None? 的鍵都不會(huì)被添加到 URL 的查詢字符串里。
你還可以將一個(gè)列表作為值傳入:
payload = {‘key1’: ‘value1’, ‘key2’: [‘value2’, ‘value3’]}
范例
import requests url = 'http://httpbin.org/get' params = { 'name': 'jack', 'age': 25 } r = requests.get(url, params = params) print(r.text)
輸出結(jié)果
在這里,我們將請(qǐng)求的參數(shù)封裝為一個(gè) json
格式的數(shù)據(jù),然后在 get 方法中傳給 params
參數(shù),這樣就完成了帶參數(shù)的 GET 請(qǐng)求 URL 的拼接,省去了自己拼接 http://httpbin.org/get?age=22&name=jack
的過程,非常的方便。
此外,在上面我們看到返回的r.tetx
雖然是個(gè)字符串,但是它其實(shí)是個(gè)JSON格式
的字符串,我們可以通過 r.json()
方法來將其直接轉(zhuǎn)換為JSON格式數(shù)據(jù),從而可以直接解析,省去了引入 json 模塊
的麻煩。示例如下
import requests url = 'http://httpbin.org/get' params = { 'name': 'jack', 'age': 25 } r = requests.get(url, params = params) print(type(r.json())) print(r.json()) print(r.json().get('args').get('age'))
輸出結(jié)果
<class 'dict'>
{'args': {'age': '25', 'name': 'jack'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.28.1', 'X-Amzn-Trace-Id': 'Root=1-6300e24d-71111778036e3f8339b55886'}, 'origin': '223.90.115.87', 'url': 'http://httpbin.org/get?name=germey&age=25'}
25
抓取二進(jìn)制數(shù)據(jù)
從上面的例子中我們發(fā)現(xiàn)我們可以輕松獲取網(wǎng)頁的html文檔,但是如果我們?cè)跒g覽網(wǎng)址時(shí)想要獲取的是圖片、視頻、音頻這些內(nèi)容的話又該怎么辦呢?
我們知道視頻音頻這些不過就是二進(jìn)制碼,所以我們獲取二進(jìn)制碼就能夠獲取到這些形形色色的圖片視頻了,接下來我們看看如何獲取這些二進(jìn)制碼
接下來以baidu的站點(diǎn)圖標(biāo)為例:
import requests r = requests.get('https://baidu.com/favicon.ico') print(r.text) print(r.content) ...... b'\x00\......x00'
使用content我們可以輸出獲取的文檔的二進(jìn)制碼,但是我們又該如何處理這些二進(jìn)制碼呢?
其實(shí)很簡(jiǎn)單直接將其保留到本地就可以了
import requests r = requests.get('https://baidu.com/favicon.ico') with open('favicon.ico', 'wb') as f: f.write(r.content)
運(yùn)行之后就發(fā)現(xiàn)我們成功爬取了圖片,其實(shí)其他之類的視頻也是這樣操作的
post請(qǐng)求
接下來就是另外一種請(qǐng)求方式post請(qǐng)求
先看看是如何進(jìn)行請(qǐng)求的
import requests data = {'name': 'jack', 'age': '25'} r = requests.post("http://httpbin.org/post", data=data) print(r.text)
輸出結(jié)果
在這里我們將需要的表單數(shù)據(jù)通過data進(jìn)行提交,完成一次post請(qǐng)求
同時(shí),你還可以為 ?data? 參數(shù)傳入一個(gè)元組列表。在表單中多個(gè)元素使用同一 key 的時(shí)候,這種方式尤其有效:
data = (('key1', 'value1'), ('key1', 'value2'))
POST請(qǐng)求的文件上傳
范例
import requests files = {'file': open('favicon.ico', 'rb')} r = requests.post('http://httpbin.org/post', files=files) print(r.text)
我們通過傳入files參數(shù)來實(shí)現(xiàn)文件上傳,不過前提是open方法中的文件需要存在(這里我上傳的文件就是在get請(qǐng)求里面獲取的百度圖標(biāo)),在這里不寫路徑表示該文件在當(dāng)前目錄下, 否則需要寫上完整的路徑。這個(gè)網(wǎng)站會(huì)返回響應(yīng),里面包含 files 這個(gè)字段,而 form 字段是空的,這證明文件上傳部分會(huì)單獨(dú)有一個(gè) files 字段來標(biāo)識(shí)。
利用requests返回響應(yīng)狀態(tài)碼
r.status_code:獲得返回的響應(yīng)狀態(tài)碼
r.status_code == requests.codes.ok:內(nèi)置狀態(tài)碼查詢
Response.raise_for_status():拋出異常的響應(yīng)狀態(tài)
利用前兩個(gè)方法我們可以獲得響應(yīng)的狀態(tài)
r = requests.get('http://httpbin.org/get') r.status_code 200
查詢狀態(tài)
r.status_code == requests.codes.ok True
如果我們發(fā)送一個(gè)錯(cuò)誤請(qǐng)求獲取,我們就可以使用Response.raise_for_status()
來拋出異常
r = requests.get('http://httpbin.org/status/404') r.status_code 404 bad_r.raise_for_status() Traceback (most recent call last): File "requests/models.py", line 832, in raise_for_status raise http_error requests.exceptions.HTTPError: 404 Client Error
如果響應(yīng)正常就不會(huì)拋出異常,返回以None
到此這篇關(guān)于Python爬蟲學(xué)習(xí)之requests的使用教程的文章就介紹到這了,更多相關(guān)Python requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python7個(gè)爬蟲小案例詳解(附源碼)中篇
- Python7個(gè)爬蟲小案例詳解(附源碼)上篇
- Python爬蟲程序中使用生產(chǎn)者與消費(fèi)者模式時(shí)進(jìn)程過早退出的問題
- Python爬蟲庫urllib的使用教程詳解
- Python利用yield?form實(shí)現(xiàn)異步協(xié)程爬蟲
- python爬蟲之requests庫使用代理方式
- python?基于aiohttp的異步爬蟲實(shí)戰(zhàn)詳解
- Python爬蟲框架NewSpaper使用詳解
- 通過python爬蟲mechanize庫爬取本機(jī)ip地址的方法
- python爬蟲beautiful?soup的使用方式
- Python爬蟲之超級(jí)鷹驗(yàn)證碼應(yīng)用
- Python爬蟲Requests庫的使用詳情
- python爬蟲模擬登錄之圖片驗(yàn)證碼實(shí)現(xiàn)詳解
- Python爬蟲eval實(shí)現(xiàn)看漫畫漫畫柜mhgui實(shí)戰(zhàn)分析
- python爬蟲實(shí)戰(zhàn)項(xiàng)目之爬取pixiv圖片
- 使用python爬蟲實(shí)現(xiàn)子域名探測(cè)問題
- python爬蟲之代理ip正確使用方法實(shí)例
- Python7個(gè)爬蟲小案例詳解(附源碼)下篇
相關(guān)文章
Python標(biāo)準(zhǔn)庫datetime之datetime模塊用法分析詳解
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫datetime之datetime模塊用法分析詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07python實(shí)現(xiàn)定時(shí)發(fā)送qq消息
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)定時(shí)發(fā)送qq消息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Python中join函數(shù)簡(jiǎn)單代碼示例
這篇文章主要介紹了Python中join函數(shù)簡(jiǎn)單代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

Python3加密解密庫Crypto的RSA加解密和簽名/驗(yàn)簽實(shí)現(xiàn)方法實(shí)例

python實(shí)現(xiàn)Pyecharts實(shí)現(xiàn)動(dòng)態(tài)地圖(Map、Geo)