網絡爬蟲_Requests庫入門

1、Requests庫的安裝


1.Requests庫的安裝與測試(簡潔版):

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 # 打印網頁內容

2.Requests庫的更多介紹:

http://www.python-requests.org

3.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

2、Requests庫的get()方法


1. 獲取網頁的代碼: 

r = requests.get(url)
	構造一個向服務器請求資源的Request對象
	requests庫內部生成,python大小寫敏感,大寫R
	返回一個包含服務器資源的Response對象 用r標識
	包含從服務器返回的全部相關資源

2.獲取網頁的完整代碼:

requests.get(url, params=None,**kwargs)
各參數含義:
    url: 擬獲取頁面的URL連接
    params:URL中的額外參數,字典或字節流格式,可選
    **kwargs:12個控制訪問的參數

3.Requests庫的2個重要對象:

Request
Response:包含了爬蟲返回的內容,1. 返回內容 2. 請求信息

4.Response對象的屬性:

r.status_code 
HTTP請求的返回狀態,200表示成功,404表示失敗(非200即爲error)
r.text
HTTP響應內容的字符串形式,即URL對應的頁面內容
r.encoding
從HTTP header中猜想的響應內容編碼方式
r.apparent_encoding
從內容中分析出的響應內容編碼方式(備選編碼方式)
r.content
HTTP響應內容的二進制形式

5.解析過程:

解析返回值的基本流程:
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 # 打印網頁內容,包含不少中文信息

6.理解Response的編碼:

r.encoding  
從HTTP header中猜想的響應內容編碼方式
說明: 從header中的charset字段中得到編碼方式,
	  若是服務器中有charset字段,說明服務器對編碼有要求;
	  不然,無要求,且默認編碼爲 ISO-8859-1(不能夠解析中文)
r.apparent_encoding
	  從內容中分析出的響應內容編碼方式(備選編碼方式)
	  所以,當沒法用r.encoding 獲取正確編碼時,則使用r.apparent 獲取網頁正確編碼

3、爬取網頁的通用代碼框架


1. 爬取網頁內容異常

咱們使用requests.get(url)獲取url網頁內容,
因爲網絡鏈接有風險,這種語句的異常處理很重要
注:使用通用代碼框架使得爬取網頁過程更有效,穩定,可靠

2.理解Requests庫的異常

1. requests.ConnectionError
	網絡鏈接錯誤異常,好比DNS查詢失敗、拒絕鏈接等
2. requests.HTTPError
	 HTTP錯誤異常
3. requests.URLRequired
	 URL缺失異常
4. requests.TooManyRedirects
	 超過最大重定向次數,產生重定向異常
5. requests.ConnectionTimeout
	 僅指鏈接遠程服務超時
6. requests.Timeout
	 請求URL超時,產生超時異常

3.response對象提供的方法:

r.raise_for_status()
若是不是200,產生異常requests.HTTPError
功能:若是狀態值返回200,則表示返回正常,不然產生HTTPError異常

4.爬取網頁的通用代碼框架:

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))
# 功能:處理爬蟲過程當中出現的一系列錯誤或者網絡不穩定的現象

4、HTTP協議及Requests庫方法


1. HTTP協議

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對應一個數據資源。
        

2.HTTP協議和Requests庫功能一致性比較

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

3.HTTP協議對資源的操做 

1.GET	    請求獲取URL位置的資源
2.HEAD	    請求獲取URL1位置資源的響應消息報告,即獲取該資源的頭部信息
3.POST	    請求向URL位置的資源後附加新的數據
4.PUT	     請求向URL位置存儲一個資源,覆蓋原URL位置的資源
5.PATCH	    請求局部更新URL位置的資源,即改變該處資源的部份內容
6.DELETE      請求刪除URL位置存儲的資源

4.理解PATCH和PUT的區別

需求:用戶修改了UserName,其餘不變
*採用PATCH,僅向URL提交UserName的局部更新請求。
*採用PUT,必須將全部20個字段一併提交到URL,未提交字段被刪除。
若是資源很龐大,僅使用PATCH修改便可。
PATCH的最主要好處:節省網絡帶寬。

5.Requests庫中post()方法  

方法一:(字典存儲)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()方法相似,可是產生的效果是覆蓋掉。

5、Requests庫主要方法解析


1. requests方法

參數介紹: 網絡

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

2. get方法[最經常使用的方法] 

requests.get(url, params=None, **kwargs)
 url     : 擬獲取頁面的url連接
 params  : url中的額外參數,字典或字節流格式,可選
 **kwargs: 12個控制訪問的參數(除了params)

3. head方法 

requests.head(url, **kwargs)
 url	 : 擬獲取頁面的url連接
 **kwargs: 13個控制訪問的參數

4. post方法 

requests.post(url, data=None, json=None, **kwargs)
    url     : 擬更新頁面的url連接
    data    : 字典、字節序列或文件,Request的內容
    json    : JSON格式的數據,Request的內容
    **kwargs: 11個控制訪問的參數(除了data,json)

5. put方法 

requests.put(url, data=None, **kwargs)
   url     : 擬更新頁面的url連接
   data    : 字典、字節序列或文件,Request的內容
   **kwargs: 12個控制訪問的參數 

6. patch方法 

requests.patch(url, data=None, **kwargs)
 url    : 擬更新頁面的url連接
 data   : 字典、字節序列或文件,Request的內容
**kwargs: 12個控制訪問的參數 

7. delete方法 

requests.delete(url, **kwargs)
  url     : 擬刪除頁面的url連接
  **kwargs: 13個控制訪問的參數

RRR

相關文章
相關標籤/搜索