2016-12-31 66 views
3

我試圖使用jsoup庫從網站獲取'li'。問題是這樣的:Jsoup - 從隱藏代碼的HTML網址讀取

  • 如果我打開網頁用CTRL + U(這是jsoup相同的讀)的來源,「UL」標籤是隱藏的。

hidden result

  • ,如果我與機能的研究打開代碼「檢查代碼」谷歌瀏覽器,「禮」所示。

shown result

發佈的代碼是沒有必要的;我只想知道如何通過jsoup或其他java免費庫訪問這個'li',而在源代碼(通過jsoup)中這些信息是隱藏的。

該網站是https://farmaci.agenziafarmaco.gov.it/bancadatifarmaci/cerca-farmaco並嘗試搜索的東西(即大溪)

+0

你能後至少鏈接到網站? – Shakhar

+1

無法重現問題很難幫助您。如果他們是這種情況的不同潛在原因,他們每個人都應該以不同的方式解決。回答你的問題可能需要寫出相當不錯的文章。請[編輯]你的問題,幷包括最少量的信息,這實際上會讓我們重現這個問題。 – Pshemo

+0

@Shakhar發佈:-) – Fidelis

回答

1

與Jsoup的問題是,它不會處理腳本。它只是獲取HTML,因爲它是在AJAX代碼執行之前。

你可以使用類似HtmlUnit的東西,它基本上是一個無GUI的瀏覽器。所以,它可以處理腳本。

可以得到圖書館的HtmlUnit嘗試後是這樣的:

String url = "https://farmaci.agenziafarmaco.gov.it/bancadatifarmaci/cerca-farmaco?search=Tachi"; 
    try(final WebClient webClient = new WebClient()) { 
     final HtmlPage page = webClient.getPage(url); 
     final HtmlUnorderedList list = page.getHtmlElementById("ul_farm_results"); 
     System.out.println(list.asText()); 
    } 

我不能檢查代碼的網站的證書配置不正確,我沒有想導入它的證書。您可能需要查看this以解決證書錯誤。

+1

以上的站點搜索內容時都會重現您的解決方案,謝謝!我添加WebClientOptions wco = webClient.getOptions();和wco.setUseInsecureSSL(true);避免證書。我如何加快代碼? @Shakhar – Fidelis

+0

我不認爲你可以加快代碼。 – Shakhar

0

JSoup不執行所有腳本,它只是獲取服務器返回的HTML。你正在尋找的是調用呈現的HTML,即執行所有腳本後由瀏覽器生成的HTML。

Java中的最佳解決方案是將Selenium用於您的首選瀏覽器。 Selenium是爲UI測試開發的,但它作爲一種刮擦工具非常流行。

一個很好的入門頁面here

一些代碼示例與Firefox:

WebDriver driver = new FirefoxDriver(); 
driver.get("https://farmaci.agenziafarmaco.gov.it/bancadatifarmaci/cerca-farmaco"); 
// Find the element 
String id = "ul_farm_results"; 
WebElement element = driver.findElement(By.id(id));