要點擊鏈接並獲得其他交互式客戶端腳本執行,您可能需要刪除Jsoup
,並使用HtmlUnit
代替。你會得到你需要的功能來點擊鏈接並抓取HTML頁面。
爲了您的目的,您正在通過ajax
訪問與動態數據填充的鏈接。要複製這種情況,您必須捕獲HtmlElement
並通過單擊它再次呈現頁面。
事情是這樣的:
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17,
YOUR_PROXY_HOST, YOUR_PROXY_PORT);
WebRequest request = new WebRequest(
new URL(
"http://bitcoincharts.com/charts/btceUSD#rg60ztgSzm1g10zm2g25zv"));
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setJavaScriptTimeout(10000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setTimeout(10000);
HtmlPage page = webClient.getPage(request);
webClient.waitForBackgroundJavaScript(30000);
List<HtmlAnchor> anchors1 = page.getAnchors();
HtmlAnchor link2 = null;
for (HtmlAnchor anchor : anchors1) {
//System.out.println(anchor.asText());
if (anchor.asText().indexOf("Load raw data") > -1) {
link2 = anchor;
break;
}
}
page = link2.click();
現在你處理的渲染數據。大概是這樣:
HtmlTable table = (HtmlTable) page.getElementById("chart_table");
System.out.println("Here : - > " + table.asText());
我能看到的唯一的併發症是因爲它是一個Ajax調用,這可能是一個有點棘手,幾秒鐘後呈現的頁面。上的HtmlUnit的常見問題解答頁面提供了幾個選項來克服它:
http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork
編輯: 嗯,我剛試過我上面的代碼(出於好奇,當然),並刮出整個數據您正在尋找的,下面的截圖:
希望它能幫助!
請發佈一些你的代碼,你已經嘗試到現在 –