この問題に直面しているHtmlUnitとJsoupのウェブサイトを解析しようとしています。 私は解析するページが異なり、このページのこのリンクを文字列配列に保存しました。 配列の長さをループして各ページを解析したいので、このように処理します。いくつかの要素をGETPAGE方法で 4)解析をリンクから新しいHTMLページの作成および取得リンクのアレイ 2の長さにループ)を開く新しいWebクライアント 3)についてHtmlUnit:同じWebClientで新しいページを開く
1) Webクライアント 6)に戻る5)クロージング2)。
このようにして、私は欲しいものを手に入れていますが、コードは少し遅いです。だから私は開いて、ループの外側にwebClientを閉じようとしました。このように:
1)リンクの配列の長さにループのための新しいWebクライアント 2)を開く 3)GETPAGE方法 4)解析とのリンクから新しいHTMLページの作成といくつかの要素 5)は2に戻ってき) 。 6)ウェブクライアントをクローズ
これははるかに高速ですが、以前の方法と同じ結果が得られていません。
このようにwebclientコンストラクタを使用するのは間違っていますか?
編集:私はこのコードを実行すると結果が正しい
public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
// TODO Auto-generated method stub
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
String[] links = {"http://www.oddsportal.com/tennis/china/atp-beijing/murray-andy-dimitrov-grigor-fTdGYm3q/#cs;2;6",
"http://www.oddsportal.com/tennis/china/atp-beijing/murray-andy-dimitrov-grigor-fTdGYm3q/#cs;2;9"};
String bm = null;
String[] odds = new String[2];
//Second way
WebClient webClient = new WebClient(BrowserVersion.CHROME);
System.out.println("Client opened");
for (int i=0; i<links.length; i++) {
HtmlPage page = webClient.getPage(links[i]);
System.out.println("Page loaded");
Document csDoc = Jsoup.parse(page.asXml());
System.out.println("Page parsed");
Element table = csDoc.select("table.table-main.detail-odds.sortable").first();
Elements cols = table.select("td:eq(0)");
if (cols.first().text().trim().contains("bet365.it")) {
bm = cols.first().text().trim();
odds[i]=table.select("tbody > tr.lo").select("td.right.odds").first().text().trim();
}
else {
Elements footTable = csDoc.select("table.table-main.detail-odds.sortable");
Elements footRow = footTable.select("tfoot > tr.aver");
odds[i] = footRow.select("td.right").text().trim();
bm = "AVG";
}
webClient.close();
}
System.out.println(bm +"\t" +odds[0] + "\t" + odds[1]);
}
:次のコードは、 私はテストです。私がwebClient.close()を動かせば; forループの外側にある結果は正しくありません。特に、オッズ[0]はオッズ[1]と等しい。
「私は以前の方法と同じ結果を得ていません」はあまりにも一般的です。より正確に、結果がどのように違うのかを教えてください。 –
「例外」がありますか? –
forループで@FredericKlein私はオッズ配列に格納されているいくつかのデータを取得しています。私はコードを実行する場合は、配列のすべての要素は同じですが、私は同じコードを実行するがforループの中でWebClientを作成する配列の要素は、(それがする必要があります)すべて異なっています。 例: 1)ループの内部Webクライアントと私は)exempleため( オッズ[0] = 4.00オッズ[1] = 3.00のオッズ外部Webクライアントとの[2] = 5.50オッズ[3] = 7.50 2)を得ますforループが得られる(例) オッズ[0] = 4.00オッズ[1] = 4.00オッズ[2] = 4.50オッズ[3] = 4。00 正しいページがロードされていないようです。 –