2017-04-02 83 views
0

當在一個循環中刮多個網站,我注意到存在之間的速度相當大的差異,Python網絡刮:睡眠和請求之間的差異(頁面,超時= X)

sleep(10) 
response = requests.get(url) 

和,

response = requests.get(url, timeout=10) 

也就是說,timeout要快得多。

此外,對於這兩種設置,我希望在請求下一頁之前每頁至少10秒的刮取時間,但事實並非如此。

  1. 爲什麼速度有這樣的差異?
  2. 爲什麼每頁的抓取時間少於10秒?

我現在使用多處理,但我認爲要記住上述保留以及非多處理。

回答

1

time.sleep停止腳本運行一定的秒數,而timeout是等待檢索URL的最長時間。如果在timeout時間到來之前檢索到數據,則剩餘時間將被跳過。所以使用timeout可以少於10秒。

time.sleep是不同的,它完全暫停您的腳本,直到它完成睡眠,然後它會運行您的請求再花幾秒鐘。所以time.sleep每次都會花費10秒以上。

他們有很不同的用途,但對於您的情況,您應該製作一個計時器,以便在10秒之前完成計時,讓程序等待。

0
response = requests.get(url, timeout=10) 
# timeout specifies the maximum time program will wait for request to complete before throwing exception. It is not necessary that program will pause for 10 seconds. If response is returned early the program won't wait anymore. 

瞭解更多關於requests超時here

time.sleep導致您的主線程進入睡眠狀態,因此您的程序在向網址發送請求前總是會等待10秒鐘。