簡介:
requests
模塊的底層實現(xiàn)其實還是urllib
植兰,但是urllib
并不常用
requests
庫簡單易用
快速上手
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)
運行結果
解釋:
response.url
:顧名思義蛉威,即請求的url
地址
response.status_code
:即響應的狀態(tài)碼
response.headers
:響應頭
response.requests.headers
:響應對應的請求頭,即我們在請求時帶的請求頭,簡單來說就是瀏覽器識別的我們訪問其網(wǎng)站帶有的請求頭缎罢,這里以請求百度為例,很明顯,這里的'User-Agent': 'python-requests/2.19.1'
,其實就是告訴訪問的url辈赋,我是python的requests訪問的。
print(response.content.decode())
response.content.decode()
:獲取網(wǎng)頁源碼
案例:獲取百度首頁的百度圖片
第一步:
首先在百度首頁的百度logo圖片上點擊鼠標右鍵膏燕,點擊檢查钥屈,或者按鍵盤上的F12,
找到這個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)
完整代碼如上篷就,得到結果在當前的目錄,即在當前目錄即可以看到baidu.png
這張圖片了
發(fā)送帶headers的請求
還記得剛才描述的headers的內(nèi)容嗎近忙?
response.requests.headers
:響應對應的請求頭竭业,即我們在請求時帶的請求頭智润,簡單來說就是瀏覽器識別的我們訪問其網(wǎng)站帶有的請求頭,這里以請求百度為例未辆,很明顯窟绷,這里的'User-Agent': 'python-requests/2.19.1'
,其實就是告訴訪問的url,我是python的requests訪問的鼎姐。
在這種情況下钾麸,瀏覽器是知道我們是爬蟲在瀏覽,那么長期這么操作會導致該網(wǎng)站對IP進行封鎖炕桨,尤其是短時間內(nèi)訪問量非常大的情況下饭尝,那么這個時候我們就需要對寫的爬蟲進行headers偽裝
怎么找到headers呢?
在瀏覽器控制臺中献宫,找到Network钥平,如果Network里什么都沒有,點擊瀏覽器的刷新姊途,或者按F5刷新涉瘾,即可出現(xiàn)內(nèi)容,在內(nèi)容中點擊左邊的第一個或者其他的都行捷兰,只要會出現(xiàn)這樣的headers就可以立叛,我們可以在這里面找到User-Agent
,將User-Agent
后面的內(nèi)容復制出來,放到我們構造的headers里面贡茅。
把它構造成字典的形式秘蛇,即:
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))
感興趣的小伙伴可以對比一下,帶有headers的請求和沒有帶有headers的請求的區(qū)別顶考,這個代碼可以看到請求來的內(nèi)容的總字節(jié)數(shù)赁还,可以對比字節(jié)數(shù)是否一致,帶headers的請求到的數(shù)據(jù)是否比不帶headers的請求驹沿,請求到的數(shù)據(jù)要多艘策?
這就是簡單的requests的請求
個人博客地址:www.limiao.tech
WX公眾號:TechBoard
不斷更新,歡迎大家的加入