Python 網絡爬蟲之Requests庫的基本用法

官網地址:Requests: HTTP for Human​docs.python-requests.org
安裝方法:pip install requests
測試1:
import requests r = requests.get('www.baidu.com')
Requests庫的7個主要方法:html

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)
kwargs:控制訪問的參數,均爲可選項python

1.params:字典或者字節序列,做爲參數增長到URL中json

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

2.data:字典、字節序列或文件對象,做爲Request的內容服務器

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

3.JSON:JSON格式的數據,做爲Request的內容cookie

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

4.headers:字典,HTTP定製頭網絡

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

5.cookies:字典或CookieJar,Request中的cookie
6.auth:元祖,支持HTTP認證功能
7.files:字典類型,傳輸文件app

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

8.timeout:設定超時時間,秒爲單位
>>> r = requests.request("GET",'http://www.baidu.com',timeout=10)
9.proxies:字典類型,設定訪問代理服務器,能夠增長登陸認證框架

pxs = {'http':'http://user:pass@10.10.10.1:1234','https':'https://10.10.10.1:4321'}
r = requests.request('GET','http://www.baidu.com',proxies = pxs)

10.allow_redirects:True/False,默認爲True,重定向開關
11.stream:True/False,默認爲True,獲取內容當即下載開關
12.verify:True/False,默認爲True,認證SSL證書開關
13.cert:保存本地SSL證書路徑dom

requests.get()方法使用:
r = requests.get(url,params=None,**kwargs)
url:頁面的URL連接
params:URL中的額外參數,字典或者字節流格式
**kwargs:12個控制訪問的參數
其餘requests方法的使用和requests.request方法同樣post

Response對象的屬性
r = requests.get(url) 構造一個向服務器請求資源的Request對象,返回一個Response對象。

\>>> import requests

\>>> r = requests.get("(http://www.baidu.com/)")

\>>> print(r.status_code)

200

\>>> type(r)

<class 'requests.models.Response'>

\>>> r.headers

{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Tue, 11 Feb 2020 04:26:11 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:27:56 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; [domain=.baidu.com](http://domain=.baidu.com/); path=/', 'Transfer-Encoding': 'chunked'}
屬性 說明
r.status_code HTTP請求的返回狀態,200表示鏈接成功,404表示失敗
r.text HTTP相應內容的字符串形式,即URL對應的頁面內容
r.encoding 從HTTP header中猜想的響應內容編碼方式
r.apparent_encoding 從內容中分析出的響應內容編碼方式(備選編碼方式)
r.content HTTP響應內容的二進制形式

編碼很重要:若是網頁編碼方式是ISO-8895-1,那麼用r.text查看的是亂碼。r.encoding只是分析網頁的頭部,猜想編碼方式,而r.apparent_encoding則是實實在在根據網頁內容分析編碼方式。因此,在爬蟲程序中,常常使用r.encoding = r.apparent_encoding,來直接獲取網頁的編碼。
爬取網頁的通用代碼框架:

異常 說明
requests.ConnectionError 網絡鏈接錯誤異常,如DNS查詢失敗、拒絕鏈接等
requests.HTTPError HTTP錯誤異常
requests.URLRequired URL缺失異常
requests.TooManyRedirects 超過最大重定向次數,產生重定向異常
requests.ConnectTimeout 鏈接遠程服務器超時異常
requests.Timeout 請求URL超時,產生超時異常

Response異常的捕捉

異常 說明
r.raise_for_status() 若是不是200,產生異常requests.HTTPError

通用代碼框架以下:

import requests
def  getHTMLText(url):
    try:
        r = requests.get(url,timeout = 30) #30秒超時異常
        r.raise_for_status()#若是r返回的狀態不是200,則引起HTTPError異常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "產生異常"

if __name__ == "__main__":
    url = "http://www.baidu.com"
    print(getHTMLText(url))

錯誤測試:

>>> u = "http://b.com"
>>> print(getHTMLText(u))
產生異常

HTTP協議---超文本傳輸協議,請求響應、無狀態的模式
URL格式 http://host[:port][path]
host:合法的Internet主機域名或者IP地址
[:port]:端口號,缺省端口爲80
[path]:請求資源的路徑

HTTP協議對資源的操做

方法 說明
GET 請求獲取URL位置的資源
HEAD 請求獲取URL位置資源的響應消息報告,即得到該資源的頭部信息
POST 請求向URL位置的資源後附加新的數據
PUT 請求向URL位置存儲一個資源,覆蓋原URL位置的資源
PATCH 請求局部更新URL位置的資源,即改變該處資源的部分內容
DELETE 請求刪除URL位置存儲的資源

Requests庫的方法與HTTP協議是一一對應的

相關文章
相關標籤/搜索