2012-04-12 18 views
4

URLを入力とし、css、images、js(すべての関連リソース)を含むWebページ全体をディスクに保存するjavaメソッドを実装したいと考えています。私はJsoup htmlパーサを使ってhtmlページを取得しています。今私が実装しようとしている唯一のオプションは、jsoupを使用してページを取得し、HTMLコンテンツを解析して相対パスを絶対パスに変換し、別のjavascriptや画像などの要求を作成してディスクに保存することです。 私はHTMLクリーナー、htmlunitパーサーについても読んでいますが、これらのすべてのケースでは、画像、CSS、およびJavaScriptファイルを取得するためにHTMLコンテンツを解析する必要があると思います。Javaコードを使用して完全なWebページを取得する

私は正しいかどうかについてアドバイスします。 またはこのタスクを達成するための簡単な方法はありますか?

+0

私はSOにいくつかの同様の質問を見つけたが、この質問に対する答えはまだ未解決である:( – sachinjain024

+2

あなたの思考が正確に右であるあなたは、Apache Nutchのためのソースコードの一部を見たいかもしれません;。検索していますindexing部はWebページを取得し、リンクをスキャンします(他にもたくさんあります)。あなたが望むコードは、類似していても同じではありません。 –

+0

これはどのように修正しましたか? –

答えて

5

を私たちがやったかのようにそれが行わなければならないか分からないが、最後にそれが私たちのために動作します:

画像付きで
Document doc = Jsoup.connect("http://rabotalux.com.ua/vacancy/4f4f800c8bc1597dc6fc7aff").get(); 
     Elements links = doc.select("link"); 
     Elements scripts = doc.select("script"); 
     for (Element element : links) { 
       System.out.println(element.absUrl("href")); 
     } 
     for (Element element : scripts) { 
       System.out.println(element.absUrl("src")); 
     } 

そしてそう関連するすべてのリソース。それは

+0

hey vacuum、このabsUrl関数は絶対パスのみを持つ要素のURLだけを出力しますか?相対パスもフェッチして絶対パスに変換したいこのような機能がJsoupに存在するのですか、それとも手動で行う必要がありますか? – sachinjain024

+0

@blunderboy [リンク](http://jsoup.org/apidocs/org/jsoup/nodes/Node.html#absUrl(java.lang.String)) – vacuum

1

私はあなたが計画しているのとまったく同じメカニズムを使用した2、3年前に同様の問題に遭遇しました。 htmlコンテンツを解析し、相対パスを絶対パスに変換します。同時に、複数のスレッドを使用して同時に実行し、パフォーマンス最適化のために画像、Javaスクリプトなどを取得しています。 。あなたはJsoupでそれを行うことができ、基本的に:-)

1

This GitHub projectがjSoupを使用して、これを行いJavaScriptを実行カントとして

しかしサイトはJavaScriptを使用していくつかの要素を作成した場合は、Jsoupは、それをスキップします。それが既に存在するなら、それをもう一度書く必要はありません!

編集:私は、このクラスのimprovedバージョンを作って、新しい機能を追加しました:

それができる:

  • エキスURLのリンクまたはインラインCSSから、例えば。背景画像の場合は、&もダウンロードしてください。

  • これは、すべてのファイルのダウンロード、(イメージ、スクリプトなど)

  • が進行し、エラーの詳細を提供しますマルチスレッドありません。

  • HTMLドキュメントに埋め込まれたHTMLフレームとネストされたフレームも取得できます。

いくつかの注意点:

  • JSoupOkHttpを使用しますので、あなたは、これらのライブラリを持っている必要があります。

  • GPLは現在、ライセンスされています。

関連する問題