Python request庫與爬蟲框架

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協議對資源的操做(6種)與以上方法一一對應
  GET:請求URL位置的資源
  HEAD:請求獲取URL位置資源的響應消息報告,即得到該資源的頭部信息
  POST:請求向URL位置的資源後附加新的數據
  PUT:請求向URL位置存儲一個資源,覆蓋原URL位置的資源
  PATCH:請求局部更新URL位置的資源,即改變該處資源的部份內容
  DELETE:請求刪除URL位置存儲的資源
【注】PATCH和PUT的區別
  假設URL位置有一組數據UserInfo,包括UserID,UserName等20個字段
  需求:用戶修改了UserName,其餘不變
  *採用PATCH方法,僅向URL提交UserName的局部更新請求
  *採用PUT方法,因爲他會覆蓋原有URL位置資源,
  因此必須將全部20個字段一併提交到URL,未提交字段被刪除
  比較PATCH和PUT看出
    Patch的最主要好處:節省網絡帶寬
HTTP協議:HypertextTransferProtocol,超文本傳輸協議
它是一個基於"請求與相應"模式的、
無狀態的(第一次請求和第二次無相關關聯)應用層協議
它通常採用URL做爲網絡資源的標識
URL是經過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源
URL格式以下 http://host[:port][path]
host:合法的Internet主機域名或IP地址
port:端口號,缺省(默認)端口爲80P
path:請求資源的路徑
當咱們向URLPOST一個字典或POST一個鍵值對時會默認地被存儲到表單form的字段下
當咱們向URLPOST字符串時會默認地被存儲到data的字段下
服務器會根據提交的數據類型不一樣進行相關的整理
PUT方法相同,可是會把原有數據覆蓋掉json

'''
requests.request(method,url,**kwargs)
method:請求方式,對應get/put/post等7種
requests.request('GET',url,**kwargs)
requests.request('HEAD',url,**kwargs)
requests.request('POST',url,**kwargs)
requests.request('PUT',url,**kwargs)
requests.request('PATCH',url,**kwargs)
requests.request('delete',url,**kwargs)
requests.request('OPTIONS',url,**kwargs)
#向服務器獲取一些與客戶端打交道的參數,不與資源直接相關因此使用較少
url:擬獲取頁面的url連接
**kwargs:控制訪問參數,共13個服務器

'''網絡

#顯式定義的參數放在了形參裏面,不怎麼用的放在了可選裏面
'''
###########################最經常使用
requests.get(url,params=None,**kwargs)
url:擬獲取頁面的url連接
params:url中的額外參數,字典或字節流格式,可選
**kwargs:12個控制訪問參數(request方法中除了param以外的12個)
'''app


'''
requests.head(url,**kwargs)
url:擬獲取頁面的url連接
**kwargs:13個控制訪問參數
'''
'''
requests.post(url,data=None,json=None,**kwargs)
url:擬獲取頁面的url連接
data:字典、字節序列或文件,Request的內容
json:JSON格式的數據,Request的內容
**kwargs:11個控制訪問參數(除了以上兩個的11個)
'''
'''
requests.put(url,data=None,**kwargs)
url:擬獲取頁面的url連接
data:字典、字節序列或文件,Request的內容
**kwargs:12個控制訪問參數(除了以上1個的12個)
'''
'''
requests.patch(url,data=None,**kwargs)
url:擬獲取頁面的url連接
data:字典、字節序列或文件,Request的內容
**kwargs:12個控制訪問參數(除了以上1個的12個)
'''
'''
requests.delete(url,**kwargs)
url:擬獲取頁面的url連接
**kwargs:13個控制訪問參數
'''框架

'''
爬取網頁的通用代碼框架
通用代碼框架:一組代碼,能夠準確的爬取網頁上的內容
用request庫進行網頁訪問的時候常常用get函數
requests.get(url)得到url的相關內容
可是網絡鏈接有風險
這樣的語句並非必定成立的,因此異常處理很重要
request庫支持6種經常使用的鏈接異常
'''
#request.ConnectionError:網絡鏈接異常,如DNS查詢失敗、拒絕鏈接等
#request.HTTPError:HTTP錯誤異常
#request.URLRequired:URL缺失異常
#request.TooManyRedirects:超過最大重定向次數,產生重定向異常
#request.ConnectTimeout:鏈接遠程服務器超時異常
#request.TimeOut:請求URL超時,產生超時異常
'''
Response類與異常打交道的方法
r.raise_for_status():若是不是200,產生異常request.HTTPError
判斷返回的response類型狀態是否是200
'''
import requests
def getHTMLText(url):
  try:
    r=requests.get(url,timeout = 30)#,timeout = 30
    r.raise_for_status()#若是狀態不是200,引起HTTPError異常
    r.encoding = r.apparent_encoding
    #防亂碼
    return r.text
  except:
    return "產生異常"
if __name__=="__main__":
  url="http://www.baidu.com"
  print(getHTMLText(url))
 

 

相關文章
相關標籤/搜索