htmlページをパースして有益な情報を選択して表示するプログラムを作りたいと思っています。ストリームを開き、この適切なコンテンツを 1 行ずつ検索することでこれを行いましたが、これは時間のかかるプロセスです。そこで、それを xml として扱い、xpath を使用することにしました。これは、システムでxmlファイルを作成し、ストリームからコンテンツをロードすることで行いましたが、空白エラーが発生したため、次のようにドキュメントを開くことにしました
doc = (Document) builder.parse(inputStream);
しかし、同じエラーが引き続き発生します。ここで尋ねた後、html 解析に jSoup を使用するように提案されました。コードを実行すると、次のようになります。
Document doc= Jsoup.connect(url).get();
読み取りタイムアウトが発生します。Pythonで同じプログラムを作成し、文字列のfindメソッドを使用して検索するなどの単純な戦略を使用すると、内容が表示されて速すぎます。Javaで高速に動作させるには?
完全なコード:
import java.io.*;
import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Parser {
public static void main(String[] args) {
Validate.isTrue(true, "usage: supply url to fetch");
try{
String url="http://www.spoj.com/ranks/PRIME1/";
Document doc= Jsoup.connect(url).get();
Elements es=doc.getElementsByAttributeValue("class","lightrow");
System.out.println(es.get(0).child(0).text());
}catch(Exception e){e.printStackTrace();}
}
}
例外:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:412)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:393)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:159)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:148)
at Parser.main(Parser.java:12)