2017-04-02 18 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あなたのメインスレッドはスリープ状態になるので、プログラムは常にURLにリクエストする前に常に10秒間待機します。