requests模組的其他方法

2021-08-21 10:04:29 字數 2884 閱讀 6082

學習目標

掌握requests中cookirjar的處理方法

掌握requests解決https證書錯誤的問題

掌握requests中超時引數的使用

掌握retrying模組的使用

使用request獲取的resposne物件,具有cookies屬性,能夠獲取對方伺服器設定在本地的cookie,但是如何使用這些cookie呢?

1.1 方法介紹

response.cookies是cookiejar型別

使用requests.utils.dict_from_cookiejar,能夠實現把cookiejar物件轉化為字典

1.2 方法展示

import requests

url =

""#傳送請求,獲取resposne

response = requests.get(url)

print

(type(response.cookies)

)#使用方法從cookiejar中提取資料

cookies = requests.utils.dict_from_cookiejar(response.cookies)

print

(cookies)

輸出為:

<

class

'requests.cookies.requestscookiejar'

>

注意:

在前面的requests的session類中,我們不需要處理cookie的任何細節,如果有需要,我們可以使用上述方法來解決

出現這個問題的原因是:ssl的證書不安全導致

2.1 **中發起請求的效果

那麼如果在**中請求會怎麼樣呢?

import requests

url = ""

response = requests.get(url)

返回證書錯誤,如下:

ssl.certificateerror ...
2.2 解決方案

為了在**中能夠正常的請求,我們修改新增乙個引數

import requests

url = ""

# requests.packages.urllib3.disable_warnings() # 不顯示安全提示

response = requests.get(url,verify=false)

在平時網上衝浪的過程中,我們經常會遇到網路波動,這個時候,乙個請求等了很久可能任然沒有結果

在爬蟲中,乙個請求很久沒有結果,就會讓整個專案的效率變得非常低,這個時候我們就需要對請求進行強制要求,讓他必須在特定的時間內返回結果,否則就報錯

3.1 超時引數使用方法如下:
response = requests.get(url,timeout=3)
通過新增timeout引數,能夠保證在3秒鐘內返回響應,否則會報錯

注意:這個方法還能夠拿來檢測**ip的質量,如果乙個**ip在很長時間沒有響應,那麼新增超時之後也會報錯,對應的這個ip就可以從**ip池中刪除

使用超時引數能夠加快我們整體的請求速度,但是在正常的網頁瀏覽過成功,如果發生速度很慢的情況,我們會做的選擇是重新整理頁面,那麼在**中,我們是否也可以重新整理請求呢?

對應的,retrying模組就可以幫助我們解決

4.1 retrying模組的使用

retrying 模組的使用

使用retrying模組提供的retry模組

通過裝飾器的方式使用,讓被裝飾的函式反覆執行

retry中可以傳入引數stop_max_attempt_number,讓函式報錯後繼續重新執行,達到最大執行次數的上限,如果每次都報錯,整個函式報錯,如果中間有乙個成功,程式繼續往後執行

4.2 retrying和requests的簡單封裝

實現乙個傳送請求的函式,每次爬蟲中直接呼叫該函式即可實現傳送請求,在其中

**參考:

# parse.py

import requests

from retrying import retry

headers = {}

#最大重試3次,3次全部報錯,才會報錯

@retry(stop_max_attempt_number=3)

def _parse_url(url)

#超時的時候回報錯並重試

response = requests.get(url, headers=headers, timeout=3)

#狀態碼不是200,也會報錯並重試

assert response.status_code == 200

return response

def parse_url(url)

try: #進行異常捕獲

response = _parse_url(url)

except exception as e:

print(e)

#報錯返回none

response = none

return response

requests.utils.dict_from_cookiejar能夠實現cookiejar轉化為字典

請求方法中新增verify=false能夠實現請求過程中不驗證證書

請求方法中新增timeout能夠實現強制程式返回結果的能夠,否則會報錯

retrying模組能夠實現捕獲函式的異常,反覆執行函式的效果,和timeout配合使用,能夠解決網路波動帶來的請求不成功的問題

jQuery其他方法

1.jquery拷貝物件 深拷貝 深拷貝把裡面的資料完全複製乙份給目標物件 會另開闢乙個內心空間 如果裡面有不衝突的屬性,會合併到一起。2.多庫共存 jquery使用 作為識別符號,隨著jquery的流行,其他js庫也會使用 作為識別符號,這樣一起使用會引起衝突。使jquery和其他的js庫不存在衝...

selenium 其他方法

coding utf 8 from selenium import webdriver import time from selenium.webdriver.common.keys import keys driver webdriver.chrome driver.get driver.maxi...

06 其他方法

1 isalive 執行緒是否存活 system.out.println thread.currentthread getname 存活 thread.currentthread isalive 2 setname 給執行緒起名字 myinfo mi newmyinfo thread t newth...