您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Python中Request 的作用是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在入門教程中我們介紹了urllib庫和urllib2的用法,同時我們了解一些爬蟲的基礎以及對爬蟲有了基本的了解。其實在我們生產環境中,使用Request庫更加方便與實用,同時我們這需要短短的幾行代碼就能解決大量的事情。
在Python簡介與環境配置中我們已經安裝了PIP管理工具,如果你是2.x版本,也可以使用easy_install來安裝Request庫,它可以幫助我們很容易的安裝三方庫:
使用pip安裝Request
# pip2.x安裝requests pip install requests # pip3.x安裝requests pip3 install requests
使用easy_install安裝Request
easy_install requests
在python中引入三方模塊非常簡單,只需要import引入即可:
import requests req = requests.get("https://ptorch.com") print(req.text)
這樣我們即可快速提取目標網頁的代碼,使用起來非常方便!
Request基本請求方式
你可以通過requests庫發送所有的http請求:
requests.get("http://httpbin.org/get") #GET請求 requests.post("http://httpbin.org/post") #POST請求 requests.put("http://httpbin.org/put") #PUT請求 requests.delete("http://httpbin.org/delete") #DELETE請求 requests.head("http://httpbin.org/get") #HEAD請求 requests.options("http://httpbin.org/get") #OPTIONS請求
使用Request發送GET請求
想要使用爬蟲獲取某個目標網頁,直接使用get方法即可發送HTTP GET請求:
req = requests.get("http://httpbin.org/get")
通常情況下我們不會只訪問基礎網頁,特別是爬取動態網頁時我們需要傳遞不同的參數獲取不同的內容;GET傳遞參數有兩種方法,可以直接在鏈接中添加參數或者利用params添加參數:
import requests payload = {'key1': 'value1', 'key2': 'value2'} req = requests.get("http://httpbin.org/get", params=payload) # 方法二 # req = requests.get("http://httpbin.org/get?key2=value2&key1=value1") print(req.url)
其實發送POST請求與GET方式很相似,只是參數的傳遞我們需要定義在data中即可:
import requests payload = {'key1': 'value1', 'key2': 'value2'} req = requests.post("http://httpbin.org/post", data=payload) print(req.text)
POST發送JSON數據
很多時候你想要發送的數據并非編碼為表單形式的,發現特別在爬取很多java網址中出現這個問題。如果你傳遞一個string而不是一個 dict,那么數據會被直接發布出去。我們可以使用json.dumps()是將dict轉化成str格式;此處除了可以自行對dict進行編碼,你還可以使用json參數直接傳遞,然后它就會被自動編碼。
import json import requests url = 'http://httpbin.org/post' payload = {'some': 'data'} req1 = requests.post(url, data=json.dumps(payload)) req2 = requests.post(url, json=payload) print(req1.text) print(req2.text)
POST文件上傳
如果我們要使用爬蟲上傳文件,可以使用file參數:
url = 'http://httpbin.org/post' files = {'file': open('test.xlsx', 'rb')} req = requests.post(url, files=files) req.text
如果有熟悉WEB開發的伙伴應該知道,如果你發送一個非常大的文件作為multipart/form-data請求,你可能希望將請求做成數據流。默認下requests不支持, 你可以使用requests-toolbelt三方庫。
在很多時候我們開發的爬蟲需要登錄,登錄后我們需要記錄登錄狀態,否則無法爬取登錄后才能爬取的網頁,在request中提供了requests.Session()這樣的類:
import requests s = requests.Session() s.get('http://httpbin.org/get')
這樣我們的request只要調用一次登錄入口就會自動維護網站的Session記錄我們的登錄狀態,以后我們可以直接使用request訪問登錄才能訪問的頁面。
我們可以使用cookies來獲取響應中的cookie: 如果某個響應中包含一些 cookie,你可以快速訪問它們:
req = requests.get("https://ptorch.com") req = requests.get("https://ptorch.com") print(req.cookies) print(req.cookies['laravel_session'])
要想發送你的cookies到服務器,可以使用cookies參數:
cookies = dict(cookies_are='working Test') req = requests.get("http://httpbin.org/cookies", cookies=cookies) print(req.text) # '{"cookies": {"cookies_are": "working Test"}}'
Cookie的返回對象為RequestsCookieJar,它的行為和字典類似,但界面更為完整,適合跨域名跨路徑使用。你還可以把Cookie Jar傳到Requests中:
jar = requests.cookies.RequestsCookieJar() jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies') jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere') url = 'http://httpbin.org/cookies' req = requests.get(url, cookies=jar) print(req.text) # '{"cookies": {"tasty_cookie": "yum"}}'
保存cookie方便下次訪問,我們需要將CookieJar轉為字典或者將字典轉為CookieJar
#將CookieJar轉為字典: cookies = requests.utils.dict_from_cookiejar(r.cookies) #將字典轉為CookieJar: cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
你可以告訴requests在經過以timeout參數設定的秒數時間之后停止等待響應。基本上所有的生產代碼都應該使用這一參數。如果不使用,你的程序可能會永遠失去響應:
requests.get('http://github.com', timeout=0.001)
注:timeout 僅對連接過程有效,與響應體的下載無關。
也就是說,這個時間只限制請求的時間。即使返回的 response 包含很大內容,下載需要一定時間,然而這并沒有什么卵用。
很多情況下網址具有反爬蟲機制,如果我們的訪問量達到一定的數量會封掉我們的IP,比如很多朋友爬取微信文章常常需要使用代理,你可以通過proxies參數為任意請求來設置代理,我們可以百度免費代理來獲取一些免費的代理,速度不是很快,但是練習足夠了。
import requests proxies = { "https": "http://127.0.0.1:4433" } req = requests.post("http://httpbin.org/post", proxies=proxies) print(req.text)
我們也可以通過HTTP_PROXY和HTTPS_PROXY環境變量來配置代理。
export HTTP_PROXY="http://127.0.0.1:2091" export HTTPS_PROXY="http://127.0.0.1:2092"
爬蟲中我們需要定制請求頭來修改我們的HTTP請求,特別是很多發爬蟲工具禁止腳本訪問,我們可以設置headers參數來模擬瀏覽器訪問,同時我們還可以通過headers來傳遞cookie來保持我們的登錄狀態:
headers = {'user-agent': 'my-app/0.0.1'} req = requests.get("https://api.github.com/some/endpoint", headers=headers)
有時候我們想下載我們爬取頁面的img圖片,你可以使用requests請求圖片,獲取response.content文本信息,實際上獲取的是圖片的二進制文本,然后保存即可:
import requests response = requests.get("https://cache.yisu.com/upload/information/20210521/347/241257.png") img = response.content open('logo.jpg', 'wb').write(response.content)
如果要下載驗證碼,可以使用上面的會話請求加載這里的下載代碼即可。
爬蟲中我們發送了請求,我們可以使用如下方法獲取Request響應用于分析和檢測:
# 響應狀態碼 req.status_code # 響應頭 req.headers # 獲取請求鏈接 req.url # 獲取網頁編碼 req.encoding # 獲取cookie req.cookies # 獲取網頁代碼 req.text
上述就是小編為大家分享的Python中Request 的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。