0

入力パラメーターとして url を Java で使用して Web ページのコンテンツを取得する最も信頼できる方法を見つけようとしています。

私が試したことは次のとおりです。1. JSOUP 2. HtmlUnit 3. URL と URLConnection

1 と 2 の問題は、ページのコンテンツを取得できる場合でも (robots.txt で許可されている場合でも)、SocketTimeoutException をスローするか、予期しない動作をすることがあります。

3 を使用すると、ミリ秒の減算を使用せずに loadTime を取得できません。これが最大の問題であり、不正確な結果をもたらします。また、コンテンツを取得するには、Streams を使用してコンテンツを 1 行ずつ読み取る必要があります。

現在の実装では、アプローチ #2 を使用しています。LoadTime と contentType の機能があります。

すべての Web ページのコンテンツについて、contentType、loadTime などが必要です。

基本的には、css の背景画像、画像、js、html などを含む Web サイト全体を検証する Link Validator プロジェクト用です。 contentType に基づいて、HTML のコンテンツのみをフィルタリングおよび解析します。

PS タイムアウトを 9 秒以上改善すると、リンクの検証が遅くなります。したがって、現在のタイムアウトは 9 秒です。

リンク検証ツールをできるだけ信頼できるものにしたいので、助けが必要です。

4

2 に答える 2

2

あなたの問題は2つの部分に分かれているようです:

  1. リモート サーバーからコンテンツを取得する方法

  2. 次に、コンテンツを解析してリンクの検証を行うにはどうすればよいですか

そして、あなたの質問は実際にはパート 1 に関するものですが、パート 1 とパート 2 の両方を同時に受講しています。これは問題の一部である可能性があります。

本当の問題は、リモート コンテンツの読み取りです。3 つのアプローチはすべて、まったく同じバックグラウンド API、つまり JRE に組み込まれた URLConnection ベースのソリューションを使用して実際にコンテンツを読み取っています。URLConnection は問題ありませんが、実際のネットワークで使用したいものではありません。

HTTP プロトコル経由でリモート リソースのコンテンツを取得するために使用できる、より優れたライブラリがいくつかあります...

  1. JBoss のNetty
  2. Apacheの HttpComponents
  3. Jean-Francois のAsyncHttpClient

ブロッキング モードであっても、AsyncHttpClient を使用するのが最適であることがわかりました。ページを取得するための非常に優れた API があり、マルチスレッドでうまく機能します。合計読み込み時間を簡単に取得できる必要があり、さらに重要なことは、多くの作業を並行して実行できる必要があることです。

基本的に、AsyncHttpClient を使用してコンテンツをロードし、そのコンテンツを JSoup (またはお好みのもの... JSoup をお勧めします) に渡し、そこで解析を行います。

間違いは、JSoup や HtmlUnit を使用することではなく、それらを使用してすべてを実行しようとすることにあります。これらは、1 つのことを 1 つのことでうまく行うように設計されたツールです... 2 つのことを行う必要があるため、それぞれが目の前のタスクに合わせて最適化された 2 つのツールを使用してください。

于 2012-09-10T20:57:39.730 に答える
0

ある種の再試行メカニズムを実装する必要があります。

于 2012-09-10T20:56:44.360 に答える