2016-09-28 74 views
1

我想呈現一個URL來通過使用JSOUP讀取幾個參數,但發現它不是呈現完整的HTML。JSOUP不呈現完整html

下面是我的代碼

Document doc=Jsoup.connect("http://www.svbcgold.com/").get(); 
System.out.println("HTML.."+doc.html()); 

在此其只顯示部分值而不是全部。在這個頁面中,我們有一些像GOLD,SILVER這樣的值,但是我不能在輸出中看到它們,它的輸出結果只顯示在表格中。

請求你請在這幫助我。

+0

歡迎來到Stack Overflow!您的問題陳述並不完全清楚 - 請編輯您的問題,以更全面地描述您預期會發生什麼以及與實際結果有何不同。看[問]提示什麼是一個很好的解釋。 –

+0

這個問題是否完全解答?然後請選擇最適合的答案或在評論中發佈後續問題(請參閱http://stackoverflow.com/help/someone-answers) –

回答

0

在您的開發工具打開的情況下在Chrome中打開此網站。您將看到,它已使異步請求在已經呈現頁面後加載其他數據。

Jsoup只解析初始響應。它不適合JavaScript驅動的網站。您需要使用像htmlunit這樣的可能與PhantomJS。

0

使用XMLHttpRequest該網站使用JavaScript請求當前價格。

調用在控制檯(Chrome開發工具)下面的JavaScript代碼複製背景請求:

var xhr = new XMLHttpRequest(); 
xhr.open('post', 'http://www.svbcgold.com/LPriceSvbc.asmx/getSVBCPriceN', true); 
xhr.setRequestHeader('Content-Type', "application/json"); 
xhr.send(); 

xhr.response然後保持JSON對象,包含所有所需的信息:

"{"d":"[{\"BranchId\":9999,\"BranchDisplayName\":\"INTERNATIONAL\",\"BrPurityProductId\":9997,\"ProductDisplayName\":\"Gold\",\"PurityDisplayName\":\" \",\"ProductType\":\"U\",\"IsProductWeight\":0,\"LPrice\":\"1323.10\",\"TxtColor\":\"Black\"},{\"BranchId\":9999,\"BranchDisplayName\":\"INTERNATIONAL\",\"BrPurityProductId\":9998,\"ProductDisplayName\":\"Silver\",\"PurityDisplayName\":\"\",\"ProductType\":\"U\",\"IsProductWeight\":0,\"LPrice\":\"19.16\",\"TxtColor\":\"Black\"},{\"BranchId\":9999,\"BranchDisplayName\":\"INTERNATIONAL\",\"BrPurityProductId\":9999,\"ProductDisplayName\":\"USD/INR\",\"PurityDisplayName\":\" \",\"ProductType\":\"U\",\"IsProductWeight\":0,\"LPrice\":\"66.41\",\"TxtColor\":\"Black\"},{\"BranchId\":1,\"BranchDisplayName\":\"VISAKHAPATNAM\",\"BrPurityProductId\":1,\"ProductDisplayName\":\"Spot Gold 100g\",\"PurityDisplayName\":\"999\",\"ProductType\":\"G\",\"IsProductWeight\":0,\"LPrice\":\"315040\",\"TxtColor\":\"Black\"},{\"BranchId\":2,\"BranchDisplayName\":\"VIJAYAWADA\",\"BrPurityProductId\":2,\"ProductDisplayName\":\"Spot Gold 100g\",\"PurityDisplayName\":\"999\",\"ProductType\":\"G\",\"IsProductWeight\":0,\"LPrice\":\"315040\",\"TxtColor\":\"Black\"},{\"BranchId\":3,\"BranchDisplayName\":\"HYDERABAD\",\"BrPurityProductId\":3,\"ProductDisplayName\":\"Spot Gold 100g\",\"PurityDisplayName\":\"999\",\"ProductType\":\"G\",\"IsProductWeight\":0,\"LPrice\":\"315040\",\"TxtColor\":\"Black\"},{\"BranchId\":1,\"BranchDisplayName\":\"VISAKHAPATNAM\",\"BrPurityProductId\":1,\"ProductDisplayName\":\"Spot Silver 1kg\",\"PurityDisplayName\":\"999\",\"ProductType\":\"S\",\"IsProductWeight\":0,\"LPrice\":\"N/A\",\"TxtColor\":\"Red\"},{\"BranchId\":2,\"BranchDisplayName\":\"VIJAYAWADA\",\"BrPurityProductId\":2,\"ProductDisplayName\":\"Spot Silver 1kg\",\"PurityDisplayName\":\"999\",\"ProductType\":\"S\",\"IsProductWeight\":0,\"LPrice\":\"N/A\",\"TxtColor\":\"Red\"},{\"BranchId\":3,\"BranchDisplayName\":\"HYDERABAD\",\"BrPurityProductId\":3,\"ProductDisplayName\":\"Spot Silver 1kg\",\"PurityDisplayName\":\"999\",\"ProductType\":\"S\",\"IsProductWeight\":0,\"LPrice\":\"N/A\",\"TxtColor\":\"Red\"}]"}" 

在Java可以使用java.net.HttpURLConnection作爲請求,而JSON解析器可以使用JSON.simple來解析響應。

例Java代碼的

try { 
    String url = "http://www.svbcgold.com/LPriceSvbc.asmx/getSVBCPriceN"; 
    HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); 

    con.setRequestMethod("POST"); 
    con.setRequestProperty("Content-Type", "application/json;charset=utf-8"); 
    con.setDoOutput(true); 

    con.connect(); 
    OutputStream os = new BufferedOutputStream(con.getOutputStream()); 
    os.flush(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String response = in.readLine(); 
    in.close(); 

    // parse the response 
    JSONObject jsonObject = (JSONObject) new JSONParser().parse(response); 
    JSONArray jsonArray = (JSONArray) new JSONParser().parse((String)jsonObject.get("d")); 

    for (Object object : jsonArray) { 
     jsonObject = (JSONObject)object; 
     System.out.println(jsonObject.get("BranchDisplayName") + "\n\t" + jsonObject.get("ProductDisplayName") + " " + jsonObject.get("PurityDisplayName") + " " + jsonObject.get("LPrice")); 
    } 

} catch (IOException | ParseException e) { 
    e.printStackTrace(); 
} 

輸出

INTERNATIONAL 
    Gold 1323.10 
INTERNATIONAL 
    Silver 19.16 
INTERNATIONAL 
    USD/INR 66.41 
VISAKHAPATNAM 
    Spot Gold 100g 999 315040 
VIJAYAWADA 
    Spot Gold 100g 999 315040 
HYDERABAD 
    Spot Gold 100g 999 315040 
VISAKHAPATNAM 
    Spot Silver 1kg 999 N/A 
VIJAYAWADA 
    Spot Silver 1kg 999 N/A 
HYDERABAD 
    Spot Silver 1kg 999 N/A 
2

我覺得Jsoup沒有解析整個文檔。這就是爲什麼你無法獲得所有內容或失蹤的原因。試試這個:

Document doc = Jsoup.connect("http://www.svbcgold.com/").header("Accept-Encoding", "gzip, deflate").userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0").maxBodySize(0).timeout(0).get(); 
System.out.println("HTML.."+doc.html()); 

希望你的問題能解決。

+0

包含價格('#LPriceTbl')的表格已生成並使用javascript插入,因此它在使用jsoup解析時沒有(不支持javascript)。正如預期的那樣,你的代碼也缺少目標信息(表格中的價格)。 –