爬蟲筆記1-Requests庫的基本方法

目標:掌握定向網絡數據爬取和網頁解析的基本能力

課程設置.png

◆1◆ 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.get()方法

r = requests.get(url)
構造一個向服務器請求的Request(大寫)對象,返回一個包含服務器資源的Response(大寫)對象,用變量r表示。
其完整使用方法爲:
requests.get(url,params=None,**kwargs)

  • url:擬獲取頁面的url鏈接
  • params:url中的額外參數,字典或字節流格式,可選
  • **kwargs:12個控制訪問的參數
import requests
r = requests.get('http://www.baidu.com')
print(r.status_code)  # 狀態碼,200表示訪問正常
print(type(r))  # 可以看到Response爲一個類
print(r.headers)  # 獲取頭部信息

輸出:

200
<class 'requests.models.Response'>
{'Server': 'bfe/1.0.8.18', 'Date': 'Sat, 06 Jan 
2018 07:42:41 GMT', 'Content-Type':

**kwargs:12個控制訪問的參數(參考)
參數1 params
params指能夠增加到url中的參數

>>> import requests
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', params = kv)
>>> print(r.url)
https://python123.io/ws?key1=value1&key2=value2

在給定的url中後面多了一個問號,問號後面key1=value1,&key2=value2。通過parame參數,我們可以把一些鍵值對增加到url中,然後再去訪問,服務器根據這些參數篩選部分資源返回。
參數2 data
data,它可以是字典、字節序列或文件對象,作爲向服務器提供或提交資源時使用。
參數3 json
json格式是http協議使用的最經常使用的數據格式,作爲內容部分可以向服務器提交,比如說用字典構造一個鍵值對,可以把它複製給json參數,那麼這個鍵值對就複製到服務器的json裏面。

>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('POST', 'http://python123.io/ws', json= kv)

參數4 headers
headers實際上是http頭的相關語句,它對應了向某一個url訪問時所發起的http的頭字段,可以用這個字,來定製訪問某一個url的http的協議頭,舉個例子:

>>> hd = {'user-agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', headers = hd)

把user-agent變爲Chrome/10,那麼在訪問某一個鏈接時,我們可以把這樣的字段賦給headers,此時headers再去向服務器訪問時服務器看到的user-agent字段就是Chrome/10
參數5 cookies 和 auth
cookies和auth都是requests庫的高級功能。
cookies指的是從http協議中解析cookie, 它可以是字典,也可以是CookieJar形式。
auth字段是一個元組類型,它是支持http認證功能的
參數6 files
顧名思義,它是向服務器傳輸文件時使用的字段。我們可以定義一個字典,用File,以對應的文件爲鍵值對,用open的方式打開這個文件,並把這個文件與files做一個關聯,同時對應到相關的url上。通過這樣的方法,我們可以向某一個鏈接提交某一個文件,這個在特定應用時還是非常有用的。

>>> fs = {'file': open('data.txt', 'rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files= fs)
>>> 

參數7 timeout
Timeout設定的超時時間,以秒爲單位。當我們發起一個get請求時,我們可以設一個timeout時間,如果在timeout時間內,我們的請求內容沒有反饋回來,那麼它將產生一個timeout的異常。

>>> r = requests.request('POST', 'http://python123.io/ws', timeout= 10)
>>>

參數8 Proxies
Proxies字段,他是一個字典類型,可以爲我們爬取網頁,設定相關的訪問代理服務器。這裏我們增加兩個代理:

>>> pxs = {'http': 'http://user:[email protected]:1234'
              'https': 'https://10.10.10.10:4321'
>>> r = requests.request('GET', 'http://www.baidu.com', proxies= pxs)
>>> 

第一個是http訪問時使用的代理,在這代理中,我們可以增加用戶名跟密碼的設置。後面是一個https的代理服務器,這樣我們在訪問百度時的ip地址,就是代理服務器的ip地址。使用這個字段可以有效的隱藏用戶爬取網頁的源的ip地址信息,能夠有效地防止對爬蟲的逆追蹤
其他參數
allow_redirects 和 stream
這兩個字段都是開關字段。
allow_redirects表示允不允許對url進行重定向。
stream指對獲取的內容是否進行立即下載,默認情況是立即下載。
verify 和 cert
verify是一個認證ssl證書的字段。
cert是保存本地ssl證書路徑的字段。
Response的5個屬性

方法 說明
r.status_code HTTP請求的返回狀態,200表示連接成功
r.text HTTP相應內容的字符串形式即url對應的頁面內容
r.encoding 從HTTPheader中猜測的相應內容編碼方式
r.apparent_encoding 從內容中分析的響應內容編碼方式
r.content HTTP響應內容的二進制形式

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

requests庫常用的6種連接異常

requests庫的異常


爬取網頁的通用代碼框架

 

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))

raise_for_status()方法
Response類提供了一個raise_for_status()方法,能夠判斷返回的Response類型狀態是不是200。如果是200,他將表示返回的內容是正確的,如果不是200,他就會產生一個異常。

◆ requests.head()方法

>>> import requests
>>> r = requests.head('http://www.cnblogs.com/zhang-anan/')
>>> r.headers
{'Date': 'Sun, 07 Jan 2018 08:21:35 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'Cache-Control': 'private, max-age=10', 'Expires': 'Sun, 07 Jan 2018
08:21:45 GMT', 'Last-Modified': 'Sun, 07 Jan 2018 08:21:35 GMT', 'X-UA Compatible': 'IE=10', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Encoding': 'gzip'}
>>> r.text
''

通過requests.head()方法可以較少流量獲取網頁資源的概要信息。

◆2◆ HTTP協議對資源的操作

HTTP協議對資源的操作

HTTP(HyperText Transfer Protocol)指的是超文本傳輸協議。超文本傳輸協議是一種基於請求與響應模式的無狀態的應用層協議。

  • 請求與響應模式:用戶發起請求,服務器做相關響應。
  • 無狀態:指的是第一次請求,跟第二次請求之間,並沒有相關的關聯。
  • 應用層協議:指的是該協議工作在tcp協議之上



作者:有雨敲窗2017
鏈接:https://www.jianshu.com/p/1b0cc1a954a8
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章