天天看點

Request庫-Python爬蟲(一)

Requests庫

安裝Requests

pip install requests      

Resquests庫的7個主要方法

方法 說明
requests.request() 構造一個請求, 支撐以下各方法的基礎方法
requests.get() 擷取HTML網頁的主要方法
requests.head() 擷取HTML網頁頭資訊的方法
requests.post() 向HTML網頁送出POST請求的方法
requests.put() 向HTML網頁送出PUT請求的方法
requests.patch() 向HTML網頁送出局部修改請求
requests.delete() 向HTML頁面送出删除請求

一. get()方法

r = requests.get(url)      

上面代碼傳回Response對象

1.1 Response對象

Response對象: 包含爬蟲傳回的内容

Response對象的屬性

屬性 說明
r.status_code HTTP請求的傳回狀态, 200表示連結成功, 404表示失敗
r.text HTTP響應内容的字元串形式, 即 url對應的頁面内容
r.encoding 從HTTP header中猜測的響應内容編碼方式
r.apparent_encoding 從内容中分析出的響應内容編碼方式(備選編碼方式)
r.content HTTP響應内容的二進制形式

1.2 Resquest對象

Request庫的異常

異常 說明
requests.ConnectionError 網絡連接配接錯誤異常, 如DNS查詢失敗,拒絕連接配接等
requests.HTTPError HTTP錯誤異常
requests.URLRequired URL缺失異常
request.TooManyRedirects 超過最大重定向次數, 産生重定向異常
requests.ConnectTimeout 連接配接遠端伺服器逾時異常
requests.Timeout 請求URL逾時, 産生逾時異常

1.3 爬取網頁的通用代碼架構

import requests

def getHTMLTest(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(getHTMLTest(url))      

二. Request主要方法解析

​requests.get(method, url, **kwargs)​

​ **kwargs: 控制通路的參數, 均為可選項

舉例:

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

#模拟Chrome10來通路網站
hd = {'User-Agent':'Chrome/10'}
r = requests.request('POST', 'http://python123.io/ws', headers=hd)

#向伺服器傳輸檔案
fs = {'file' : open('data.xls', 'rb')}
r = requests.request('POST', 'http://python123.io/ws', file=fs)

# 設定逾時時間
r = requests.request('GET', 'http://www.baidu.com', timeout=10)

pxs = {'http':'http://user:[email protected]:1231',
    'https':'https://11.10.10.1:3212'}
r = requests.request('GET', 'http://www.baidu.com', proxies=pxs)      
參數 作用
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證書開關