我想解析HtmlUnit和Jsoup的網站,我面臨這個問題。 我有不同的頁面解析,我將這些頁面的鏈接存儲在一個字符串數組中。 我想循環數組的長度和解析每一頁,我以這種方式進行。HtmlUnit:使用相同的WebClient打開新頁面
1)環上的鏈接的數組 2的長度)打開新Web客戶端 3)創建從鏈路新HtmlPage與GETPAGE方法 4)解析和得到一些元件 5)截止的WebClient 6)返回到2)。
這樣,我得到我想要的東西,但代碼是有點慢。所以我試圖在for循環之外打開並關閉webClient。像這樣:
1)上鍊路的陣列的長度打開新Web客戶端 2)對於循環 3)創建從鏈路新HtmlPage與GETPAGE方法 4)解析和得到一些元件 5)返回到2) 。 6)關閉WebClient的
它更速度更快,但我不獲取先前方式相同的結果。
這是錯誤的使用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];
'但我沒有獲得以前的方式相同的結果'太籠統了;請更確切地說,結果是不同的。 –
你是否收到任何'例外(S)? –
@FredericKlein for循環我得到一些數據,我存儲在賠率數組中。如果我運行的代碼,我發佈該值數組的所有元素是相同的,而如果我運行相同的代碼,但在for循環內創建webclient數組的元素都是不同的(因爲它應該是)。例如: 1)with webclient在for循環中獲得(例如) 賠率[0] = 4.00賠率[1] = 3.00賠率[2] = 5.50賠率[3] = 7.50 2)with webclient outside我得到的for循環(例如) 賠率[0] = 4.00賠率[1] = 4.00賠率[2] = 4.50賠率[3] = 4。00 它似乎沒有加載正確的頁面 –