如何使jsoup等待完整页面(跳过进度页面)加载?

时间:2016-03-20 08:51:36

标签: java web-scraping jsoup

我正在尝试解析网页并使用Jsoup提取数据。但该链接是动态的,并在显示详细信息之前抛出等待加载的页面。所以Jsoup似乎处理等待页面而不是详细信息页面。无论如何要等待页面满载?

3 个答案:

答案 0 :(得分:4)

如果某些内容是在加载页面后动态创建的,那么解析完整内容的最佳机会就是将Selenium与JSoup一起使用:

%d

答案 1 :(得分:2)

可能有问题的页面是由浏览器(客户端)中的JavaScript生成的。 Jsoup不解释JavaScript,所以你运气不好。但是,您可以在浏览器开发人员工具的网络选项卡中分析页面加载,并找出在页面加载期间进行的AJAX调用。这些调用也有URL,您可以通过直接访问它们获得所需的所有信息。或者,您可以使用真实的浏览器引擎加载页面。如果使用Java 8,可以使用selenium webdriver等库或JavaFX webkit组件。

答案 2 :(得分:0)

我想我只是在扩大luksch的答案。我不熟悉Web框架,所以答案看起来有点难以理解。因为页面是使用像Jsoup这样的解析器动态加载的,所以我们必须知道在尝试解析之前所有元素都已完全加载。因此,不要立即解析,而是使用webdriver(selenium)检查元素状态,加载后,获取页面源并解析或使用webdriver本身来收集所需的数据,而不是使用单独的解析器。

WebDriver driver = new ChromeDriver();
    driver.get("<DynamicURL>");
    List<WebElement> elements = null;
    while (elements == null)
    {
        elements = driver.findElements(By.className("marker"));
        if (!valuePresent(elements))
        {
            elements = null;
        }
    }
    if (elements != null)
    {
        processElements(elements);
    }
相关问题