簡(jiǎn)介:
requests模塊的底層實(shí)現(xiàn)其實(shí)還是urllib,但是urllib并不常用
requests庫(kù)簡(jiǎn)單易用
快速上手
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
常用屬性
import requests
url = "http://www.baidu.com"
response = requests.get(url)
print(response.url)
print(response.status_code)
print(response.headers)
print(response.request.headers)
運(yùn)行結(jié)果

解釋:
response.url:顧名思義,即請(qǐng)求的url地址
response.status_code:即響應(yīng)的狀態(tài)碼
response.headers:響應(yīng)頭
response.requests.headers:響應(yīng)對(duì)應(yīng)的請(qǐng)求頭,即我們?cè)谡?qǐng)求時(shí)帶的請(qǐng)求頭,簡(jiǎn)單來(lái)說就是瀏覽器識(shí)別的我們?cè)L問其網(wǎng)站帶有的請(qǐng)求頭,這里以請(qǐng)求百度為例,很明顯,這里的'User-Agent': 'python-requests/2.19.1',其實(shí)就是告訴訪問的url,我是python的requests訪問的。
print(response.content.decode())
response.content.decode():獲取網(wǎng)頁(yè)源碼
案例:獲取百度首頁(yè)的百度圖片
第一步:

首先在百度首頁(yè)的百度logo圖片上點(diǎn)擊鼠標(biāo)右鍵,點(diǎn)擊檢查,或者按鍵盤上的F12,

找到這個(gè)logo的圖片的src,即鏈接地址:
//www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super
import requests
url = "http://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super"
response = requests.get(url)
with open("baidu.png", "wb") as f:
f.write(response.content)
完整代碼如上,得到結(jié)果在當(dāng)前的目錄,即在當(dāng)前目錄即可以看到baidu.png這張圖片了
發(fā)送帶headers的請(qǐng)求
還記得剛才描述的headers的內(nèi)容嗎?
response.requests.headers:響應(yīng)對(duì)應(yīng)的請(qǐng)求頭,即我們?cè)谡?qǐng)求時(shí)帶的請(qǐng)求頭,簡(jiǎn)單來(lái)說就是瀏覽器識(shí)別的我們?cè)L問其網(wǎng)站帶有的請(qǐng)求頭,這里以請(qǐng)求百度為例,很明顯,這里的'User-Agent': 'python-requests/2.19.1',其實(shí)就是告訴訪問的url,我是python的requests訪問的。
在這種情況下,瀏覽器是知道我們是爬蟲在瀏覽,那么長(zhǎng)期這么操作會(huì)導(dǎo)致該網(wǎng)站對(duì)IP進(jìn)行封鎖,尤其是短時(shí)間內(nèi)訪問量非常大的情況下,那么這個(gè)時(shí)候我們就需要對(duì)寫的爬蟲進(jìn)行headers偽裝
怎么找到headers呢?

在瀏覽器控制臺(tái)中,找到Network,如果Network里什么都沒有,點(diǎn)擊瀏覽器的刷新,或者按F5刷新,即可出現(xiàn)內(nèi)容,在內(nèi)容中點(diǎn)擊左邊的第一個(gè)或者其他的都行,只要會(huì)出現(xiàn)這樣的headers就可以,我們可以在這里面找到User-Agent,將User-Agent后面的內(nèi)容復(fù)制出來(lái),放到我們構(gòu)造的headers里面。
把它構(gòu)造成字典的形式,即:
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
}
完整代碼如下:
import requests
url = "http://www.baidu.com"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
}
response = requests.get(url, headers=headers)
print(len(response.content))
感興趣的小伙伴可以對(duì)比一下,帶有headers的請(qǐng)求和沒有帶有headers的請(qǐng)求的區(qū)別,這個(gè)代碼可以看到請(qǐng)求來(lái)的內(nèi)容的總字節(jié)數(shù),可以對(duì)比字節(jié)數(shù)是否一致,帶headers的請(qǐng)求到的數(shù)據(jù)是否比不帶headers的請(qǐng)求,請(qǐng)求到的數(shù)據(jù)要多?
這就是簡(jiǎn)單的requests的請(qǐng)求
個(gè)人博客地址:www.limiao.tech
WX公眾號(hào):TechBoard
不斷更新,歡迎大家的加入