Python之Requests模塊

Requests 模塊說明:
支持HTTP連接保持和連接池吃型,支持cookie保持會話唧瘾,支持文件上傳喇勋,支持自動確定響應(yīng)內(nèi)容編碼缨该,支持國家化的URL和POST數(shù)據(jù)自動編碼。

requests模塊安裝

pip install requests

Requests模塊簡單入門:

import requests
# 嘗試獲取某個網(wǎng)頁,如:百度
r = requests.get('https://www.baidu.com/')  # 訪問成功茄蚯,返回200

# 發(fā)送HTTP POST請求
r =  requests.post('http://httpbin.org/post', data = {'key':'value'})

# 對于其他的http請求的操作

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

帶參數(shù)的請求實(shí)例:
發(fā)送帶參數(shù)的get請求压彭,get請求是以關(guān)鍵字params傳遞參數(shù)的
發(fā)送帶參數(shù)的post請求睦优,post請求是以關(guān)鍵字data傳遞參數(shù)的

import requests
requests.get('http://www.dict.baidu.com/s', params={'wd': 'python'})    #GET參數(shù)實(shí)例
requests.post('http://www.itwhy.org/wp-comments-post.php', data={'comment': '測試POST'})    #POST參數(shù)實(shí)例

Post發(fā)送Json實(shí)例:

import requests
import json
 
r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'}))
print(r.json())

Post一個文件:

url='https://www.baidu.com'
files={'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)

# 可以在post文件時指定文件名等額外的信息:
url = 'http://pythontab.com/postTest'
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post(url, files=files) 

傳遞url參數(shù)
如果是手工構(gòu)建的URL,數(shù)據(jù)會以鍵值對的模式存儲在URL中壮不,跟在一個問號的后面汗盘。如,login的api/user/login?username='tester'&passwd='aA123456'询一。 Requests允許使用params關(guān)鍵字參數(shù)隐孽,以一個字符串字典來提供這些參數(shù)

payload = {'username':'tester','passwd':'aA123456'}
r = requests.post('http://hostNmae/api/user/login',params=payload)
# 返回 200
print(r.url)# 通過打印輸出該 URL,URL 已被正確編碼

響應(yīng)內(nèi)容: 讀取服務(wù)器響應(yīng)內(nèi)容
Requests會自動解碼來自服務(wù)器的內(nèi)容健蕊。大多數(shù)的Unicode字符集都能被無縫解碼菱阵。

r = requests.get('https://www.baidu.com/')r
r.text # content of the response, in unicode
r.content # 以字節(jié)的方式訪問請求響應(yīng)體,
r.content.decode() # 加上decode方法

訂制請求頭
如果想為請求添加HTTP 頭部缩功,只要簡單傳遞一個dict給header就可以了晴及。
例如,指定content-type:

url = 'http://m.ctrip.com'
headers = {'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'}
r = requests.post(url, headers=headers)
print(r.request.headers)

注意: 所有的 header 值必須是 string嫡锌、bytestring 或者 unicode虑稼。盡管傳遞 unicode header 也是允許的,但不建議這樣做势木。

更加復(fù)雜的POST請求

url = 'http://m.ctrip.com'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload)) #如果傳遞的payload是string而不是dict蛛倦,需要先調(diào)用dumps方法格式化一下

返回狀態(tài)碼

r = requests.get('https://www.baidu.com/') 
r.status_code

響應(yīng)頭

r = requests.get('https://www.baidu.com/')
print(r.headers)
print(r.headers['Content-Type'])
print(r.headers.get('content-type'))

設(shè)置訪問代理

#設(shè)置訪問代理
proxies = {
           "http": "http://10.10.10.10:8888",
           "https": "http://10.10.10.100:4444",
          }
r = requests.get('http://m.ctrip.com', proxies=proxies)

下載頁面

r=requests.get("http://www.pythontab.com")
with open("haha.html","wb") as html:
    html.write(r.content)
html.close()

Requests整合案例1:

import requests
import nnlog
import os
from conf.setting import LOG_PATH
class MyRequest:
    log_file_name  = os.path.join(LOG_PATH,'MyRequest.log')#日子文件名
    time_out = 10 #請求超時時間
    def __init__(self,url,data=None,headers=None,file=None):
        self.url = url
        self.data = data
        self.headers = headers
        self.file = file
    def post(self):
        try:
            req = requests.post(self.url,data=self.data,headers=self.headers,
                                files=self.file,timeout=self.time_out)
        except Exception as e:
            res = {"status":0,"data":e.args}  #0代表請求失敗
        else:
            try:
               res = {"status":1,"data":req.json()} #1代表返回的json
            except Exception as e:
                res = {"staus":2,"data":req.text} #2代表返回不是json
        log_str = 'url: %s 請求方式:post  data:%s ,返回?cái)?shù)據(jù):%s'%(self.url,self.data,res)
        self.write_log(log_str)
        return res

    def get(self):
        try:
            req = requests.get(self.url,params=self.data,headers=self.headers,timeout=self.time_out)
        except Exception as e:
            res = {"status":0,"data":e.args}  #0代表請求失敗
        else:
            try:
               res = {"status":1,"data":req.json()} #1代表返回的json

            except Exception as e:
                res = {"staus":2,"data":req.text} #2代表返回不是json
        log_str = 'url: %s get請求 data:%s ,返回?cái)?shù)據(jù):%s'%(self.url,self.data,res)
        self.write_log(log_str)
        return res

    @classmethod
    def write_log(cls,content):
        log = nnlog.Logger(cls.log_file_name)
        log.debug(content)

參考文檔:http://docs.python-requests.org/zh_CN/latest/user/advanced.html#advanced

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啦桌,隨后出現(xiàn)的幾起案子溯壶,更是在濱河造成了極大的恐慌,老刑警劉巖甫男,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件且改,死亡現(xiàn)場離奇詭異,居然都是意外死亡查剖,警方通過查閱死者的電腦和手機(jī)钾虐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門噪窘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笋庄,“玉大人,你說我怎么就攤上這事倔监≈鄙埃” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵浩习,是天一觀的道長静暂。 經(jīng)常有香客問我,道長谱秽,這世上最難降的妖魔是什么洽蛀? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任摹迷,我火速辦了婚禮,結(jié)果婚禮上郊供,老公的妹妹穿的比我還像新娘峡碉。我一直安慰自己,他們只是感情好驮审,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布鲫寄。 她就那樣靜靜地躺著,像睡著了一般疯淫。 火紅的嫁衣襯著肌膚如雪地来。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天熙掺,我揣著相機(jī)與錄音未斑,去河邊找鬼。 笑死币绩,一個胖子當(dāng)著我的面吹牛颂碧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播类浪,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼载城,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了费就?” 一聲冷哼從身側(cè)響起诉瓦,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎力细,沒想到半個月后睬澡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡眠蚂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年煞聪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逝慧。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡昔脯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笛臣,到底是詐尸還是另有隱情云稚,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布沈堡,位于F島的核電站静陈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鲸拥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一拐格、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刑赶,春花似錦禁荒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谒所,卻和暖如春热康,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劣领。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工姐军, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尖淘。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓奕锌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親村生。 傳聞我的和親對象是個殘疾皇子惊暴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 背景 公司內(nèi)網(wǎng)有個論壇,各種公司的前沿消息都會有人在討論趁桃。一忙起來辽话,經(jīng)常忘記逛論壇,所以寫了個爬蟲卫病,爬取論壇前10...
    aialin閱讀 922評論 0 11
  • python發(fā)送郵件 準(zhǔn)備 python中發(fā)送郵件主要用的是smtplib和email兩個模塊油啤,下面主要對這兩個模...
    愛撒謊的男孩閱讀 492評論 0 2
  • 簡單郵件傳輸協(xié)議(SMTP)是一種協(xié)議,用于在郵件服務(wù)器之間發(fā)送電子郵件和路由電子郵件蟀苛。 Python提供smtp...
    易百教程閱讀 43,766評論 4 62
  • 在搜索python教程的時候益咬,碰巧遇到了“利用python發(fā)送電子郵件”的教程,覺得很實(shí)用也比較有意思帜平,所以就花了...
    簡訊Alfred閱讀 4,262評論 4 27
  • 文:思想者風(fēng) 圖:pixabay ...
    思想者風(fēng)閱讀 878評論 0 1