Web ページの html を取得して に保存できるようにしたいString
ので、処理を行うことができます。また、さまざまな種類の圧縮をどのように処理できますか。
Javaを使用してそれを行うにはどうすればよいですか?
Web ページの html を取得して に保存できるようにしたいString
ので、処理を行うことができます。また、さまざまな種類の圧縮をどのように処理できますか。
Javaを使用してそれを行うにはどうすればよいですか?
Jsoupのような適切な HTML パーサーを使用します。次に、次のように簡単です。
String html = Jsoup.connect("http://stackoverflow.com").get().html();
GZIP およびチャンク化された応答と文字エンコーディングを完全に透過的に処理します。jQuery でできるように、HTMLトラバースやCSS セレクターによる操作など、より多くの利点も提供します。Document
としてではなく、として取得するだけString
です。
Document document = Jsoup.connect("http://google.com").get();
それを処理するために、基本的な String メソッドを実行したり、HTML で正規表現を実行したりする必要はありません。
これは、JavaのURLクラスを使用してテストされたコードです。ただし、例外を処理したり、コールスタックに渡したりするという、ここで行うよりも優れた作業を行うことをお勧めします。
public static void main(String[] args) {
URL url;
InputStream is = null;
BufferedReader br;
String line;
try {
url = new URL("http://stackoverflow.com/");
is = url.openStream(); // throws an IOException
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (MalformedURLException mue) {
mue.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (is != null) is.close();
} catch (IOException ioe) {
// nothing to see here
}
}
}
ビルの答えは非常に良いですが、圧縮やユーザーエージェントなどのリクエストでいくつかのことをしたいかもしれません。次のコードは、リクエストに対してさまざまなタイプの圧縮を行う方法を示しています。
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // Cast shouldn't fail
HttpURLConnection.setFollowRedirects(true);
// allow both GZip and Deflate (ZLib) encodings
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
String encoding = conn.getContentEncoding();
InputStream inStr = null;
// create the appropriate stream wrapper based on
// the encoding type
if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
inStr = new GZIPInputStream(conn.getInputStream());
} else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
inStr = new InflaterInputStream(conn.getInputStream(),
new Inflater(true));
} else {
inStr = conn.getInputStream();
}
ユーザー エージェントも設定するには、次のコードを追加します。
conn.setRequestProperty ( "User-agent", "my agent name");
URLやURLConnectionなどの組み込みライブラリを使用することもできますが、それらはあまり制御できません。
個人的には、Apache HTTPClientライブラリを使用します。
編集: HTTPClient はApache によってサポート終了に設定されています。代替は次のとおりです: HTTP コンポーネント
上記のすべてのアプローチは、ブラウザーで表示される Web ページのテキストをダウンロードしません。最近では、多くのデータが HTML ページのスクリプトを介してブラウザーに読み込まれます。上記の手法はいずれもスクリプトをサポートしておらず、html テキストのみをダウンロードするだけです。HTMLUNIT は JavaScript をサポートしています。したがって、ブラウザで表示される Web ページのテキストをダウンロードする場合は、HTMLUNITを使用する必要があります。
Unix/Linux ボックスでは 'wget' を実行するだけで済みますが、クロスプラットフォーム クライアントを作成している場合、これは実際にはオプションではありません。もちろん、これは、ダウンロードした時点からディスクにヒットするまでの間、ダウンロードしたデータに対してあまり多くのことをしたくないことを前提としています。
Jetty には、Web ページのダウンロードに使用できる HTTP クライアントがあります。
package com.zetcode;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.api.ContentResponse;
public class ReadWebPageEx5 {
public static void main(String[] args) throws Exception {
HttpClient client = null;
try {
client = new HttpClient();
client.start();
String url = "http://example.com";
ContentResponse res = client.GET(url);
System.out.println(res.getContentAsString());
} finally {
if (client != null) {
client.stop();
}
}
}
}
この例では、単純な Web ページのコンテンツを印刷します。
Java で Web ページを読むチュートリアルでは、URL、JSoup、HtmlCleaner、Apache HttpClient、Jetty HttpClient、および HtmlUnit を使用して Java でプログラムによって Web ページをダウンロードする 6 つの例を記述しました。