匿名質問者

 インターネット等の情報を頼りにjavaで画像をスクレイピングするプログラムを作りました。

一つの画像であれば接続、取得、画像の保存まで全て上手にできています。

 しかし、for文で繰り返しで回した途端上手く動かなくなります。指定したサーバに接続が出来なくなります。下記がエラーメッセージです。
java.net.ConnectException: Connection timed out: connect
エラーメッセージを頼りに調べてみると、「宛先ホストがダウン」している等がでてきました。(まんまですが)ブラウザでも開けるし、単一の画像であれば接続、取得、画像の保存まで可能なのに繰り返しになるとこうなります。宛先のURL等は何度も確認したので間違いないはずです。

 何か分かる方がいらっしゃいましたらご教授お願い致します。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/03/28 07:50:03

回答0件)

回答はまだありません

  • 匿名回答1号
    匿名回答1号 2014/03/21 19:13:35
    for文で回す間隔はどれくらいですか?短すぎるとサイトからブロックされてしまいます。間隔を開けて(例えば数分に一回とか)アクセスし直しても同じエラーが出ますか?
  • 匿名質問者
    匿名質問者 2014/03/21 22:52:33
    ご指摘の通り、スリープを導入することで解決することが出来ました。ありがとうございました。
    しかし、なぜ、このような問題が発生するのでしょうか。For文の中身は前回の繰り返しの分が実行完了になるまで次の分の繰り返しは実行されないですよね?
    例えば、For文の中に接続の手順があったとしたら、一回目の接続が確立されるまで二回目の接続はされないですよね?
    もし、そうではないとしたら、接続している途中に違ったURLへの接続を指示したために衝突が発生し、接続が出来ていなかったということでしょうか・・・。
  • 匿名回答2号
    匿名回答2号 2014/03/22 09:14:42
    ループは何回くらい回してるのでしょう?
    これはもう、相手方の規模、用途、考え方次第なので、相手方により全然違ってくるのですが、画像といえど通常の利用で取得する数は一度に数十もあれば多い方ですよね。
    同じ所からあまりに沢山のアクセスがあると、他のユーザに影響あるかもしれませんし、そういう通常利用でないユーザにサーバや通信回線の能力をふんだんに使ってもらう義理は無いので、同じ所からのアクセス頻度を制限している事があります。
    また、小さい所だとそもそもサーバ容量が足りてなくて遅くなるとか、共用サーバだと供用者間であまり偏らない様に制限してるとか。
    ただ、制限してない所もあるし、限度がどこかは完全に相手方によります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません