從零開始學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個控制通路的參數