1. 在管理員權限下啓動command窗口 2. 輸入 pip install requests 便可安裝 3. 安裝完成後測試 import requests r = requests.get("http://www.baidu.com") r.status_code # 若是狀態碼輸出200則表示訪問成功 r.encoding = 'utf-8' r.text # 打印網頁內容
http://www.python-requests.org
一、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
r = requests.get(url) 構造一個向服務器請求資源的Request對象 requests庫內部生成,python大小寫敏感,大寫R 返回一個包含服務器資源的Response對象 用r標識 包含從服務器返回的全部相關資源
requests.get(url, params=None,**kwargs) 各參數含義: url: 擬獲取頁面的URL連接 params:URL中的額外參數,字典或字節流格式,可選 **kwargs:12個控制訪問的參數
Request Response:包含了爬蟲返回的內容,1. 返回內容 2. 請求信息
r.status_code HTTP請求的返回狀態,200表示成功,404表示失敗(非200即爲error) r.text HTTP響應內容的字符串形式,即URL對應的頁面內容 r.encoding 從HTTP header中猜想的響應內容編碼方式 r.apparent_encoding 從內容中分析出的響應內容編碼方式(備選編碼方式) r.content HTTP響應內容的二進制形式
解析返回值的基本流程: 1. r.status_code 檢查返回的response對象的狀態,若是返回值是200,則繼續 2. r.text r.encoding 3. r.apparent_encoding 4. r.content 具體操做: import requests # 導入requests庫 r = requests.get("http://www.baidu.com") # 導入百度 r.status_code # 若是狀態碼輸出200則表示訪問成功 r.text # 打印網頁內容 r.encoding # 查看網頁編碼格式 # 若輸出格式爲 ‘ISO-8859-1’,則打印網頁內容爲亂碼(非中文) r.apparent_encoding # 查看該網頁另一種編碼格式 # 若輸出格式爲 ‘utf-8’,則打印網頁內容中能夠包含不少中文 r.encoding = 'utf-8' r.text # 打印網頁內容,包含不少中文信息
r.encoding 從HTTP header中猜想的響應內容編碼方式 說明: 從header中的charset字段中得到編碼方式, 若是服務器中有charset字段,說明服務器對編碼有要求; 不然,無要求,且默認編碼爲 ISO-8859-1(不能夠解析中文) r.apparent_encoding 從內容中分析出的響應內容編碼方式(備選編碼方式) 所以,當沒法用r.encoding 獲取正確編碼時,則使用r.apparent 獲取網頁正確編碼
咱們使用requests.get(url)獲取url網頁內容, 因爲網絡鏈接有風險,這種語句的異常處理很重要 注:使用通用代碼框架使得爬取網頁過程更有效,穩定,可靠
1. requests.ConnectionError 網絡鏈接錯誤異常,好比DNS查詢失敗、拒絕鏈接等 2. requests.HTTPError HTTP錯誤異常 3. requests.URLRequired URL缺失異常 4. requests.TooManyRedirects 超過最大重定向次數,產生重定向異常 5. requests.ConnectionTimeout 僅指鏈接遠程服務超時 6. requests.Timeout 請求URL超時,產生超時異常
r.raise_for_status() 若是不是200,產生異常requests.HTTPError 功能:若是狀態值返回200,則表示返回正常,不然產生HTTPError異常
import requests def getHTMLText(url): try: r = requests.get(url, 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))
# 功能:處理爬蟲過程當中出現的一系列錯誤或者網絡不穩定的現象
HTTP協議,Hypertext Transfer Protocol,超文本傳輸協議 HTTP是一個基於「請求與響應」模式的、無狀態的應用層協議 進一步解釋: 用戶發起請求,服務器做出相應 無狀態:用戶屢次發起請求之間並無關聯 應用層協議工做在TCP協議之上 HTTP協議採用URL做爲定位網絡資源的標識。 URL格式 http://host[:port][path] host:合法的Internet主機域名或IP地址 port:端口號,缺省端口爲80 path:請求資源的路徑 實例: http://www.bit.edu.cn 指的是北京理工大學的官網 http://220.181.111.188/duty 指的是該主機下的duty 文件夾 HTTP URL的理解: URL是經過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源。
HTTP協議 Requests庫方法 功能一致性 GET requests.get() 一致 HEAD requests.head() 一致 POST requests.post() 一致 PUT requests.put() 一致 PATCH requests.patch() 一致 DELETE requests.delete() 一致
1.GET 請求獲取URL位置的資源 2.HEAD 請求獲取URL1位置資源的響應消息報告,即獲取該資源的頭部信息 3.POST 請求向URL位置的資源後附加新的數據 4.PUT 請求向URL位置存儲一個資源,覆蓋原URL位置的資源 5.PATCH 請求局部更新URL位置的資源,即改變該處資源的部份內容 6.DELETE 請求刪除URL位置存儲的資源
需求:用戶修改了UserName,其餘不變 *採用PATCH,僅向URL提交UserName的局部更新請求。 *採用PUT,必須將全部20個字段一併提交到URL,未提交字段被刪除。 若是資源很龐大,僅使用PATCH修改便可。 PATCH的最主要好處:節省網絡帶寬。
方法一:(字典存儲)python
# 該字典存儲在form字段下,自動編碼爲form import requests payload = {'key1':'value1','key2':'value2'} r = requests.post('http://httpbin.org/post',data = payload) print(r.text)
輸出結果:json
{ ... "form": { "key1": "value1", "key2": "value2" }, ... }
方法二:(data數據域存儲)瀏覽器
# 向URL POST一個字符串,自動編碼爲data import requests r = requests.post('http://httpbin.org/post',data = 'ABC') print(r.text)
輸出結果:服務器
{ ... "data": "ABC", ... }
致使差別的解析:cookie
根據用戶提交數據的不一樣,在服務器上自動對相應數據整理。 put()方法相似,可是產生的效果是覆蓋掉。
參數介紹: 網絡
requests.request(method, url, **kwargs) method : 請求方式,對應get/put/post等7種 url : 擬獲取頁面的url連接 **kwargs: 訪問參數,13個
method:請求方式app
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:控制訪問的參數,均爲可選項(如下是各類訪問參數)框架
**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證書路徑
參數的使用實例:params的使用:字典或字節序列,做爲參數增長到url中post
import requests kv = {'key1':'value1','key2':'value2'} r = requests.request('GET','http://python123.io/ws',params=kv) print(r.url)
輸出:將kv字段的內容附加到url中測試
https://python123.io/ws?key1=value1&key2=value2
requests.get(url, params=None, **kwargs) url : 擬獲取頁面的url連接 params : url中的額外參數,字典或字節流格式,可選 **kwargs: 12個控制訪問的參數(除了params)
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個控制訪問的參數(除了data,json)
requests.put(url, data=None, **kwargs)
url : 擬更新頁面的url連接
data : 字典、字節序列或文件,Request的內容
**kwargs: 12個控制訪問的參數
requests.patch(url, data=None, **kwargs)
url : 擬更新頁面的url連接
data : 字典、字節序列或文件,Request的內容
**kwargs: 12個控制訪問的參數
requests.delete(url, **kwargs) url : 擬刪除頁面的url連接 **kwargs: 13個控制訪問的參數
RRR