2017-09-05 79 views
1

私はScrapyを介してウェブサイトをスクラップしようとしています。しかし、ウェブサイトは時には非常に遅く、ブラウザでの最初のリクエストでは15-20秒ほどかかります。とにかく、Scrapyを使ってウェブサイトをクロールしようとすると、TCP Timeoutエラーが発生します。私のブラウザではウェブサイトが正常に開かれます。私もテストのためUSER_AGENT設定を上書きしているScrapy - TCP接続タイムアウトを設定する

2017-09-05 17:34:41 [scrapy.downloadermiddlewares.retry] DEBUG: Gave up retrying <GET http://www.hosane.com/result/spec 
ialList> (failed 16 times): TCP connection timed out: 10060: A connection attempt failed because the connected party di 
d not properly respond after a period of time, or established connection failed because connected host has failed to re 
spond.. 

:ここにメッセージです。 この場合、DOWNLOAD_TIMEOUTの設定は動作しません。デフォルトは180秒で、TCPタイムアウトエラーを出す前に20-30秒かかることさえありません。

この問題の原因は何ですか。 ScrapyでTCPタイムアウトを設定する方法はありますか?

答えて

7

TCP connection timed outは、実際の初期TCP接続タイムアウトが通常はTCP SYNパケット再送信の観点から定義されているため、Scrapy指定のDOWNLOAD_TIMEOUTの前に発生する可能性があります。私のLinuxボックスにデフォルトで

は、私が6つの再送信を持っている:

、実際には、あまりにもScrapyため、ツイストから twisted.internet.error.TCPTimedOutError: TCP connection timed out: 110: Connection timed out.を受け取って前に 0 + 1 + 2 + 4 + 8 + 16 + 32 (+64) = 127 secondsを意味
cat /proc/sys/net/ipv4/tcp_syn_retries 
6 

。 (すなわち、各再試行および第6の再試行後に応答を受信しない間の初期試験は、指数バックオフです。)

Iは、例えば8に/proc/sys/net/ipv4/tcp_syn_retriesを設定した場合、私は代わりに、これを受け取ることを確認することができる:

User timeout caused connection failure: Getting http://www.hosane.com/result/specialList took longer than 180.0 seconds. 

これは、0+1+2+4+8+16+32+64+128(+256) > 180です。

10060: A connection attempt failed... Windowsソケットエラーコードのようです。 TCP接続タイムアウトを少なくともDOWNLOAD_TIMEOUTに変更する場合は、TCP SYN再試行回数を変更する必要があります。 (私はあなたのシステムでそれを行う方法はわかりませんが、Googleはあなたの友人です)

+0

ありがとう!これは正しい答えのようです。私はそれを試した後にあなたに戻ってきます! :) – Asym

+0

私にとって、非常に高いタイムアウトであっても、そのウェブサイトは毎回反応せず、ほとんどの場合、応答しなかったことに注意してください。 –

+0

私はブラウザでウェブサイトにアクセスすることができます...それでは、ユーザーエージェントであっても、Scrapyと異なる動作をするのはなぜですか... – Asym

関連する問題