私のアプリケーションには、いくつかのWebスクレイピング機能が必要です。すべてのデータをダウンロードするURLオブジェクトがあります。しかし、私は多くのページをスクレイプする必要があり、多くのURLオブジェクトを作成するので、多くの接続を開きます。それを最適化して、1つの接続を持ち、それを使用して他のページにのみ移動できるようにする方法は?
乾杯
私のアプリケーションには、いくつかのWebスクレイピング機能が必要です。すべてのデータをダウンロードするURLオブジェクトがあります。しかし、私は多くのページをスクレイプする必要があり、多くのURLオブジェクトを作成するので、多くの接続を開きます。それを最適化して、1つの接続を持ち、それを使用して他のページにのみ移動できるようにする方法は?
乾杯
私の知る限り、URLConnection
URLごとに異なるものを使用する必要があります(基盤となるネットワーク接続も変更する必要があるため、これは理にかなっています)。このオブジェクトを作成することがあなたのボトルネックであることを私は真剣に疑っています。ネットワーク時間だと思いますが、プロファイルがないと確実にわかりません。
適度な量のページの場合、作業キューを検討します(たとえば、を使用しますExecutorService
)。多数のページについては、JavaバージョンのMap/Reduceを調べることもあります。
編集:Map / Reduceを単純なワーカーキューよりも優れたものにするには、スクレイピングを実行するために複数のコンピューターを使用できるようにする必要があります。
Apache HTTPコンポーネントを使用できます。これには、同時アクセスをサポートする接続マネージャーなど、多くの機能があります。