2017-04-02 51 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秒钟。