Jsoup - 从隐藏代码的html网址中读取

时间:2016-12-31 15:49:00

标签: java html jsoup

我正在尝试使用jsoup库从网站上获取“li”。问题是:

  • 如果我使用CTRL + U打开网站源代码(jsoup读取的内容相同),则隐藏'ul'标记。

hidden result

  • 如果我使用谷歌浏览器的“检查代码”打开代码,则会显示“li”。

shown result

不需要发布代码;我只想知道如何使用jsoup或其他java免费库访问这个'li',而在源代码中(以及通过jsoup)这些信息是隐藏的。

该网站为https://farmaci.agenziafarmaco.gov.it/bancadatifarmaci/cerca-farmaco并尝试搜索某些内容(即Tachi)

2 个答案:

答案 0 :(得分:1)

Jsoup的问题在于它不会处理脚本。它只是在执行AJAX代码之前获得html。

您可以使用类似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 :(得分: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));