目錄
第二章 基本庫的使用
2.1 urllib的使用
1 發送請求
2 處理異常
3 解析鏈接
4 分析Robots協議
2.2 requests的使用
1 準備工作
2 實例引入
3 GET請求
4 POST請求
5 響應
6 高級用法
2.3 正則表達式
1 實例引入
2 match
3 search
4 findall
5 sub
6 compile
2.4 httpx的使用
1 示例
2 安裝
3 基本使用
4 client對象
5 支持http/2.0
6 支持異步請求
第二章 基本庫的使用
最基礎的http包括urllib、requests、httpx。
2.1 urllib的使用
使用urllib可以實現http請求的發送,著需要指定請求的url、請求頭、請求體等。此外,urllib還可以把服務器返回的響應轉換為python對象。
1 發送請求
使用urllib庫中的request模塊,可以方便地發送請求并得到響應。
- urlopen
import urllib.requestresponse = urllib.request.urlopen('https://www.python.org')
print(response.read().decode('utf-8'))# 利用type方法輸出響應的類型
import urllib.requestresponse = urllib.request.urlopen('https://www.python.org')
print(type(response))
print(response.status)
print(response.getheaders)
print(response.getheader('Server'))# urlopen方法的API
urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=Flase, contexy=None)
- data參數:可選,如果傳遞了這個參數,請求方式是post(模擬表單提交)。在添加該參數,需要使用bytes方法將參數轉化為字節流編碼格式的內容,即bytes類型。
運行結果:
- timeout參數,設置超時時間,單位為秒。如果請求超出了設置的這個時間,還沒有得到響應,就會拋出異常。如果不指定該參數,則會使用全局默認事件。
或如下:
- 其他參數:context參數,必須是ssl.SSLContext類型,用來指定SSL的設置;cafile和capath分別用來指定CA證書和其路徑;cadefault參數現在已經啟用了,默認值為false。
- request
- 高級用法:handler,可以理解為各種處理器,包括登陸驗證、處理cookie、處理代理設置。
- 驗證:適用于啟用了基本身份認證的網站
- 代理
- cookie
獲取網站的cookie:
運行結果:
(輸出了每條cookie條目的名稱和值)
輸出文件格式的內容:
1.txt格式
2.lwp格式
通過load方法讀取本地的cookie文件,獲取其中內容。
2 處理異常
當出現問題時,request模塊便會拋出error模塊中定義的異常。
- URLError
- HTTPError
3 解析鏈接
- urlparse
- urlunparse
- urlsplit
- urlunsplit
- urljoin
- urlencode
- parse_qs
- parse_qsl
- quote
- unquote
4 分析Robots協議
利用urllib庫的robotparser模塊,可以分析網站的robots協議。
- Robots協議
- 爬蟲名稱
- robotparser
2.2 requests的使用
1 準備工作
pip install requests
2 實例引入
3 GET請求
- 基本實例
- 抓取網頁
- 抓取二進制數
- 添加請求頭
4 POST請求
5 響應
6 高級用法
- 文件上傳
- cookie設置
- session維持
- SSL證書驗證
- 超時設置
- 身份認證
- 代理設置
- prepared request
2.3 正則表達式
1 實例引入
2 match
- 匹配目標
- 通用匹配
- 貪婪與非貪婪
- 修飾符
- 轉義匹配
3 search
4 findall
5 sub
6 compile
2.4 httpx的使用
對于強制使用http2.0協議的網站,使用urllib和requests是無法爬取數據的。這時,需要要用到支持http/2.0的請求庫,比較有代表性的是hyper和httpx。
1 示例
2 安裝
pip install httpx
pip install 'httpx[http2]'
3 基本使用
4 client對象
5 支持http/2.0
6 支持異步請求
來源: