成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python中Request的作用是什么

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)Python中Request 的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項目涵蓋了網(wǎng)頁視覺設(shè)計、VI標志設(shè)計、成都營銷網(wǎng)站建設(shè)、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、成都做手機網(wǎng)站、微商城、網(wǎng)站托管及成都網(wǎng)站維護、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計、SEO優(yōu)化排名。設(shè)計、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標準。已經(jīng)為成都宴會酒店設(shè)計行業(yè)客戶提供了網(wǎng)站制作服務(wù)。

Request的介紹

在入門教程中我們介紹了urllib庫和urllib2的用法,同時我們了解一些爬蟲的基礎(chǔ)以及對爬蟲有了基本的了解。其實在我們生產(chǎn)環(huán)境中,使用Request庫更加方便與實用,同時我們這需要短短的幾行代碼就能解決大量的事情。

Request的安裝

在Python簡介與環(huán)境配置中我們已經(jīng)安裝了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

Request的使用

python中引入三方模塊非常簡單,只需要import引入即可:

import requests

req = requests.get("https://ptorch.com")
print(req.text)

這樣我們即可快速提取目標網(wǎng)頁的代碼,使用起來非常方便!

Request基本請求方式

你可以通過requests庫發(fā)送所有的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發(fā)送GET請求

想要使用爬蟲獲取某個目標網(wǎng)頁,直接使用get方法即可發(fā)送HTTP GET請求:

req = requests.get("http://httpbin.org/get")

通常情況下我們不會只訪問基礎(chǔ)網(wǎng)頁,特別是爬取動態(tài)網(wǎng)頁時我們需要傳遞不同的參數(shù)獲取不同的內(nèi)容;GET傳遞參數(shù)有兩種方法,可以直接在鏈接中添加參數(shù)或者利用params添加參數(shù):

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)

使用Request發(fā)送POST請求

其實發(fā)送POST請求與GET方式很相似,只是參數(shù)的傳遞我們需要定義在data中即可:

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
req = requests.post("http://httpbin.org/post", data=payload)
print(req.text)

POST發(fā)送JSON數(shù)據(jù)

很多時候你想要發(fā)送的數(shù)據(jù)并非編碼為表單形式的,發(fā)現(xiàn)特別在爬取很多java網(wǎng)址中出現(xiàn)這個問題。如果你傳遞一個string而不是一個 dict,那么數(shù)據(jù)會被直接發(fā)布出去。我們可以使用json.dumps()是將dict轉(zhuǎn)化成str格式;此處除了可以自行對dict進行編碼,你還可以使用json參數(shù)直接傳遞,然后它就會被自動編碼。

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參數(shù):

url = 'http://httpbin.org/post'
files = {'file': open('test.xlsx', 'rb')}

req = requests.post(url, files=files)
req.text

如果有熟悉WEB開發(fā)的伙伴應(yīng)該知道,如果你發(fā)送一個非常大的文件作為multipart/form-data請求,你可能希望將請求做成數(shù)據(jù)流。默認下requests不支持, 你可以使用requests-toolbelt三方庫。

請求會話

在很多時候我們開發(fā)的爬蟲需要登錄,登錄后我們需要記錄登錄狀態(tài),否則無法爬取登錄后才能爬取的網(wǎng)頁,在request中提供了requests.Session()這樣的類:

import requests
s = requests.Session()
s.get('http://httpbin.org/get')

這樣我們的request只要調(diào)用一次登錄入口就會自動維護網(wǎng)站的Session記錄我們的登錄狀態(tài),以后我們可以直接使用request訪問登錄才能訪問的頁面。

Cookie獲取

我們可以使用cookies來獲取響應(yīng)中的cookie: 如果某個響應(yīng)中包含一些 cookie,你可以快速訪問它們:

req = requests.get("https://ptorch.com")

req = requests.get("https://ptorch.com")
print(req.cookies)
print(req.cookies['laravel_session'])

要想發(fā)送你的cookies到服務(wù)器,可以使用cookies參數(shù):

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轉(zhuǎn)為字典或者將字典轉(zhuǎn)為CookieJar

#將CookieJar轉(zhuǎn)為字典:
cookies = requests.utils.dict_from_cookiejar(r.cookies)

#將字典轉(zhuǎn)為CookieJar:
cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)

超時配置

你可以告訴requests在經(jīng)過以timeout參數(shù)設(shè)定的秒數(shù)時間之后停止等待響應(yīng)?;旧纤械纳a(chǎn)代碼都應(yīng)該使用這一參數(shù)。如果不使用,你的程序可能會永遠失去響應(yīng):

requests.get('http://github.com', timeout=0.001)

注:timeout 僅對連接過程有效,與響應(yīng)體的下載無關(guān)。

也就是說,這個時間只限制請求的時間。即使返回的 response 包含很大內(nèi)容,下載需要一定時間,然而這并沒有什么卵用。

代理

很多情況下網(wǎng)址具有反爬蟲機制,如果我們的訪問量達到一定的數(shù)量會封掉我們的IP,比如很多朋友爬取微信文章常常需要使用代理,你可以通過proxies參數(shù)為任意請求來設(shè)置代理,我們可以百度免費代理來獲取一些免費的代理,速度不是很快,但是練習足夠了。

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環(huán)境變量來配置代理。

export HTTP_PROXY="http://127.0.0.1:2091"
export HTTPS_PROXY="http://127.0.0.1:2092"

請求頭設(shè)置

爬蟲中我們需要定制請求頭來修改我們的HTTP請求,特別是很多發(fā)爬蟲工具禁止腳本訪問,我們可以設(shè)置headers參數(shù)來模擬瀏覽器訪問,同時我們還可以通過headers來傳遞cookie來保持我們的登錄狀態(tài):

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("/upload/otherpic48/241257.png")
img = response.content
open('logo.jpg', 'wb').write(response.content)

如果要下載驗證碼,可以使用上面的會話請求加載這里的下載代碼即可。

獲取Request響應(yīng)

爬蟲中我們發(fā)送了請求,我們可以使用如下方法獲取Request響應(yīng)用于分析和檢測:

# 響應(yīng)狀態(tài)碼
req.status_code
# 響應(yīng)頭
req.headers
# 獲取請求鏈接
req.url
# 獲取網(wǎng)頁編碼
req.encoding
# 獲取cookie
req.cookies
# 獲取網(wǎng)頁代碼
req.text

上述就是小編為大家分享的Python中Request 的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標題:Python中Request的作用是什么
路徑分享:http://jinyejixie.com/article28/ggsgjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄電子商務(wù)、商城網(wǎng)站營銷型網(wǎng)站建設(shè)、ChatGPT、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
晋中市| 建水县| 山丹县| 威信县| 樟树市| 安陆市| 麻栗坡县| 高碑店市| 元朗区| 兴海县| 商水县| 新乡市| 根河市| 兴义市| 烟台市| 南皮县| 黑龙江省| 滦南县| 上思县| 木兰县| 罗田县| 宁德市| 都江堰市| 大石桥市| 永昌县| 津南区| 如东县| 新野县| 合江县| 唐河县| 安化县| 胶州市| 白山市| 城市| 仁布县| 德钦县| 南漳县| 宜川县| 荣成市| 中超| 施甸县|