一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python 爬蟲(chóng)(二):Requests 庫(kù)

 文炳春秋 2020-03-13

所謂爬蟲(chóng)就是模擬客戶端發(fā)送網(wǎng)絡(luò)請(qǐng)求,獲取網(wǎng)絡(luò)響應(yīng),并按照一定的規(guī)則解析獲取的數(shù)據(jù)并保存的程序。要說(shuō) Python 的爬蟲(chóng)必然繞不過(guò) Requests 庫(kù)。

1 簡(jiǎn)介

對(duì)于 Requests 庫(kù),官方文檔是這么說(shuō)的:

Requests 唯一的一個(gè)非轉(zhuǎn)基因的 Python HTTP 庫(kù),人類可以安全享用。
警告:非專業(yè)使用其他 HTTP 庫(kù)會(huì)導(dǎo)致危險(xiǎn)的副作用,包括:安全缺陷癥、冗余代碼癥、重新發(fā)明輪子癥、啃文檔癥、抑郁、頭疼、甚至死亡。

這個(gè)介紹還是比較生動(dòng)形象的,便不再多說(shuō)。安裝使用終端命令 pip install requests

2 快速上手

2.1 發(fā)送請(qǐng)求

導(dǎo)入 Requests 模塊:

import requests

獲取網(wǎng)頁(yè):

r = requests.get('http://')

此時(shí),我們獲取了 Response 對(duì)象 r,我們可以通過(guò) r 獲取所需信息。Requests 簡(jiǎn)便的 API 意味著所有 HTTP 請(qǐng)求類型都是顯而易見(jiàn)的,我們來(lái)看一下使用常見(jiàn) HTTP 請(qǐng)求類型 get、post、put、delete 的示例:

r = requests.head('http:///get')
r = requests.post('http:///post', data = {'key':'value'})
r = requests.put('http:///put', data = {'key':'value'})
r = requests.delete('http:///delete')

通常我們會(huì)設(shè)置請(qǐng)求的超時(shí)時(shí)間,Requests 使用 timeout 參數(shù)來(lái)設(shè)置,單位是秒,示例如下:

r = requests.head('http:///get', timeout=1)

2.2 參數(shù)傳遞

在使用 get 方式發(fā)送請(qǐng)求時(shí),我們會(huì)將鍵值對(duì)形式參數(shù)放在 URL 中問(wèn)號(hào)的后面,如:http:///get?key=val ,Requests 通過(guò) params 關(guān)鍵字,以一個(gè)字符串字典來(lái)提供這些參數(shù)。比如要傳 key1=val1key2=val2http:///get,示例如下:

pms= {'key1': 'val1', 'key2': 'val2'}
r = requests.get("http:///get", params=pms)

Requests 還允許將一個(gè)列表作為值傳入:

pms= {'key1': 'val1', 'key2': ['val2', 'val3']}

:字典里值為 None 的鍵都不會(huì)被添加到 URL 的查詢字符串里。

2.3 響應(yīng)內(nèi)容

我們來(lái)獲取一下服務(wù)器的響應(yīng)內(nèi)容,這里地址 https://api.github.com 為例:

import requests
r = requests.get('https://api.github.com')
print(r.text)

# 輸出結(jié)果
# {"current_user_url":"https://api.github.com/user","current_user...

當(dāng)訪問(wèn) r.text 之時(shí),Requests 會(huì)使用其推測(cè)的文本編碼,我們可以使用 r.encoding 查看其編碼,也可以修改編碼,如:r.encoding = 'GBK',當(dāng)改變了編碼,再次訪問(wèn) r.text 時(shí),Request 都將會(huì)使用 r.encoding 的新值。

1)二進(jìn)制響應(yīng)內(nèi)容
比如當(dāng)我們要獲取一張圖片的數(shù)據(jù),會(huì)以二進(jìn)制的方式獲取響應(yīng)數(shù)據(jù),示例如下:

from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))

2)JSON響應(yīng)內(nèi)容
Requests 中已經(jīng)內(nèi)置了 JSON 解碼器,因此我們可以很容易的對(duì) JSON 數(shù)據(jù)進(jìn)行解析,示例如下:

import requests
r = requests.get('https://api.github.com')
r.json()

:成功調(diào)用 r.json() 并不一定響應(yīng)成功,有的服務(wù)器會(huì)在失敗的響應(yīng)中包含一個(gè) JSON 對(duì)象(比如 HTTP 500 的錯(cuò)誤細(xì)節(jié)),這時(shí)我們就需要查看響應(yīng)的狀態(tài)碼了 r.status_coder.raise_for_status(),成功調(diào)用時(shí) r.status_code 為 200,r.raise_for_status() 為 None。

2.4 自定義請(qǐng)求頭

當(dāng)我們要給請(qǐng)求添加 headers 時(shí),只需給 headers 參數(shù)傳遞一個(gè)字典即可,示例如下:

url = 'http://'
hds= {'user-agent': 'xxx'}
r = requests.get(url, headers=hds)

:自定義 headers 優(yōu)先級(jí)是低于一些特定的信息的,如:在 .netrc 中設(shè)置了用戶認(rèn)證信息,使用 headers 設(shè)置的授權(quán)就不會(huì)生效,而當(dāng)設(shè)置了 auth 參數(shù),.netrc 的設(shè)置會(huì)無(wú)效。所有的 headers 值必須是 string、bytestring 或者 unicode,通常不建議使用 unicode。

2.5 重定向與歷史

默認(rèn)情況下,Requests 會(huì)自動(dòng)處理除了 HEAD 以外的所有重定向,可以使用響應(yīng)對(duì)象的 history 屬性來(lái)追蹤重定向,其返回為響應(yīng)對(duì)象列表,這個(gè)列表是按照請(qǐng)求由晚到早進(jìn)行排序的,看一下示例:

import requests
r = requests.get('http://github.com')
print(r.history)
# 輸出結(jié)果
# [<Response [301]>]

如果使用的是 get、post、put、delete、options、patch 可以使用 allow_redirects 參數(shù)禁用重定向。示例如下:

r = requests.get('http://', allow_redirects=False)

2.6 錯(cuò)誤與異常

當(dāng)遇到網(wǎng)絡(luò)問(wèn)題(如:DNS 查詢失敗、拒絕連接等)時(shí),Requests 會(huì)拋出 ConnectionError 異常;在 HTTP 請(qǐng)求返回了不成功的狀態(tài)碼時(shí), Response.raise_for_status() 會(huì)拋出 HTTPError 異常;請(qǐng)求超時(shí),會(huì)拋出 Timeout 異常;請(qǐng)求超過(guò)了設(shè)定的最大重定向次數(shù),會(huì)拋出 TooManyRedirects 異常。所有 Requests 顯式拋出的異常都繼承自 requests.exceptions.RequestException。

參考:
http://cn./zh_CN/latest/user/quickstart.html

歡迎關(guān)注文末公眾號(hào),免費(fèi)領(lǐng)取海量學(xué)習(xí)資料!



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美日韩有码一二三区| 99久久国产精品免费| 国产一区二区精品丝袜| 亚洲精品美女三级完整版视频| 天堂网中文字幕在线视频| 亚洲综合色在线视频香蕉视频| 欧美日韩中黄片免费看| 黄片免费观看一区二区| 91爽人人爽人人插人人爽| 黄色在线免费高清观看| 中文字幕一区二区熟女| 91久久精品国产成人| 日本本亚洲三级在线播放| 成人欧美一区二区三区视频| 国产av熟女一区二区三区蜜桃| 韩国日本欧美国产三级| 午夜精品成年人免费视频| 亚洲精选91福利在线观看| 成人午夜在线视频观看| 久久亚洲午夜精品毛片| 隔壁的日本人妻中文字幕版| 欧美黑人在线精品极品| 国产精品成人一区二区在线| 国产又黄又爽又粗视频在线| 欧美成人欧美一级乱黄| 亚洲免费黄色高清在线观看| 久久热九九这里只有精品| 久久永久免费一区二区| 国产国产精品精品在线| 久久精品国产在热久久| 日韩高清毛片免费观看| 久久精品亚洲欧美日韩| 久久精品视频就在久久| 亚洲欧美日韩另类第一页| 日本熟妇熟女久久综合| 亚洲一区二区三区有码| 五月天综合网五月天综合网| 日本一区二区三区久久娇喘| 国产情侣激情在线对白| 日韩精品日韩激情日韩综合| 少妇人妻无一区二区三区|