天天看點

從零開始學Python-3(Request庫入門)

從零開始學Python-3(爬蟲)

一個例子:

擷取網頁的方法

r = requests.get(url)
           

構造一個向伺服器請求資源的Request對象,傳回一個包含伺服器資源的Response 對象

requests的完整方法

url : 逆擷取頁面的url連結

params :url中的額外參數,字典或位元組流格式,可選

**kwargs : 12個控制通路的參數

Response對象的屬性(1)

屬性 說明
r.status_code HTTP請求的傳回狀态,200表示連接配接成功,404表示失敗
r.text HTTP響應内容的字元串形式,即,url對應的頁面内容
r.encoding 從HTTP header中猜測的響應内容編碼方式
r.apparent_encoding 從内容中分析出的響應内容編碼方式(備選編碼方式)
r.content HTTP響應内容的二進制形式

Response對象的屬性 ---r.status_code

① 正确(200) 可以擷取對應的屬性

② 404或其他 某些原因出錯,或産生了異常

Response的編碼

r.encoding 從HTTP header中猜測的響應内容編碼方式
r.apparent_encoding 從内容中分析出的響應内容編碼方式(備選編碼方式)

r.encoding:如果header中不存在charset,則認為編碼為ISO-8859-1

​ r.text根據r.encoding顯示網頁内容

r.apparent_encoding:根據網頁内容分析出的編碼方式

可以看作是r.encoding的備選

Response的異常

異常 說明
requests.ConnectionError 網絡連接配接錯誤異常,如DNS查詢失敗、拒絕連接配接等
requests.HTTPError HTTP錯誤異常
requests.URLRequired URL缺失異常
requests.TooManyRedirects 超過最大重定向次數,産生重定向異常
requests.ConnectTimeout 連接配接遠端伺服器逾時異常
requests.Timeout 請求URL逾時,産生逾時異常

請求網頁的通用代碼

import requests


def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return \'産生異常\'

#這個是主函數
if __name__ == \'__main__\':
    url = \'http://www.baidu.com\'
    print(getHTMLText(url))

           

HTTP協定及Requests庫方法

Requests庫的7個主要方法

方法 說明
requests.request() 構造一個請求,支撐以下各方法的基礎方法
requests.get() 擷取HTML網頁的主要方法,對應于HTTP的GET
requests.head() 擷取HTML網頁頭資訊的方法,對應于HTTP的HEAD
requests.post() 向HTML網頁送出POST請求的方法,對應于HTTP的POST
requests.put() 向HTML網頁送出PUT請求的方法,對應于HTTP的PUT
requests.patch() 向HTML網頁送出局部修改請求,對應于HTTP的PATCH
requests.delete() 向HTML頁面送出删除請求,對應于HTTP的DELETE

HTTP 是什麼

HTTP,Hypertext Transfer Protocol,超文本傳輸協定

HTTP是一個基于“請求與響應”模式的、無狀态的應用層協定

HTTP協定采用URL作為定位網絡資源的辨別,URL

格式如下:

http://host[:port][path]

host: 合法的Internet主機域名或IP位址

port: 端口号,預設端口為80

path: 請求資源的路徑

HTTP協定

HTTP URL 執行個體

https://python123.io/index

HTTP協定對資源的操作

方法 說明
GET 請求擷取URL位置的資源
HEAD 請求擷取URL位置資源的響應消息報告,即獲得該資源的頭部資訊
POST 請求向URL位置的資源後附加新的資料
PUT 請求向URL位置存儲一個資源,覆寫原URL位置的資源
PATCH 請求局部更新URL位置的資源,即改變該處資源的部分内容
DELETE 請求删除URL位置存儲的資源

HTTP協定對資源的操作

使用者----->伺服器 PUT POST PATCH DELETE

伺服器------>使用者 GET HEAD

URL 就是他們的描述

注意:PATCH和PUT的差別

PATCH 不會覆寫原有的資料

PUT會覆寫原有的資料

PATCH的最主要好處:節省網絡帶寬

HTTP協定和Requests庫

HTTP協定方法 Requests庫方法 功能一緻性
GET requests.get() 一緻
HEAD requests.head() 一緻
O requests.post() 一緻
PUT requests.put() 一緻
PATCH requests.patch() 一緻
DELETE requests.delete() 一緻

Requests庫的head()方法

head()方法就是擷取頭檔案

post就是更新相關的代碼

put會覆寫原有的資料

使用方法如下:

import requests

if __name__ == \'__main__\':
    payload = {\'Money\': \'100\', \'Power\': \'200\'}
    r = requests.post(\'http://httpbin.org/put\', data=payload)  # 傳回的是一個字典,自動編碼為form(表單),是更新資料
    r = requests.put(\'http://httpbin.org/put\', data=payload)  # 傳回的是一個字典,自動編碼為form(表單),是覆寫資料
    r = requests.put(\'http://httpbin.org/put\', data=\'ABC\')  # 向URL,POST一個字元串,自動編碼為資料
    print(r.text)

           

Requests庫的7個主要方法

方法 說明
requests.request() 構造一個請求,支撐以下各方法的基礎方法
requests.get() 擷取HTML網頁的主要方法,對應于HTTP的GET
requests.head() 擷取HTML網頁頭資訊的方法,對應于HTTP的HEAD
requests.post() 向HTML網頁送出POST請求的方法,對應于HTTP的POST
requests.put() 向HTML網頁送出PUT請求的方法,對應于HTTP的PUT
requests.patch() 向HTML網頁送出局部修改請求,對應于HTTP的PATCH
requests.delete() 向HTML頁面送出删除請求,對應于HTTP的DELETE

關于requests.request(method,url,**kwargs)

method : 請求方式,對應get/put/post等7種

∙ url : 拟擷取頁面的url連結

∙ **kwargs: 控制通路的參數,共13個

requests.request(method, url, **kwargs)

∙ method : 請求方式

r = requests.request(\'GET\', url, **kwargs)

r = requests.request(\'HEAD\', url, **kwargs)

r = requests.request(\'POST\', url, **kwargs)

r = requests.request(\'PUT\', url, **kwargs)

r = requests.request(\'PATCH\', url, **kwargs)

r = requests.request(\'delete\', url, **kwargs)

r = requests.request(\'OPTIONS\', url, **kwargs)

**kwargs:控制通路的參數,均為可選項

params:字典或位元組序列,作為參數增加到url中

data : 字典、位元組序列或檔案對象,作為Request的内容

json : JSON格式的資料,作為Request的内容

headers : 字典,HTTP定制頭

cookies : 字典或CookieJar,Request中的cookie

auth : 元組,支援HTTP認證功能

files : 字典類型,傳輸檔案

timeout : 設定逾時時間,秒為機關

proxies : 字典類型,設定通路代理伺服器,可以增加登入認證

allow_redirects : True/False,預設為True,重定向開關

stream : True/False,預設為True,擷取内容立即下載下傳開關

verify : True/False,預設為True,認證SSL證書開關

cert : 本地SSL證書路徑

requests.get(url, params=None, **kwargs)

url : 拟擷取頁面的url連結

params : url中的額外參數,字典或位元組流格式,可選

**kwargs: 12個控制通路的參數

requests.head(url, **kwargs)

url : 拟擷取頁面的url連結

**kwargs: 12個控制通路的參數

requests.post(url, data=None, json=None, **kwargs)

url : 拟更新頁面的url連結

data : 字典、位元組序列或檔案,Request的内容

json : JSON格式的資料,Request的内容

**kwargs: 12個控制通路的參數

requests.patch(url, data=None, **kwargs)

**

∙ url : 拟更新頁面的url連結

data : 字典、位元組序列或檔案,Request的内容

**kwargs: 12個控制通路的參數

requests.delete(url, **kwargs)

∙ url : 拟删除頁面的url連結

∙ **

kwargs: 12個控制通路的參數

requests.get(url, params=None, **kwargs)

url : 拟擷取頁面的url連結

params : url中的額外參數,字典或位元組流格式,可選

**kwargs: 12個控制通路的參數