当前位置: 首页 > 知识库问答 >
问题:

Java 解析 JS 生成的 html 元素

武睿
2023-03-14

我对Java的html解析非常陌生,我以前使用JSoup来解析简单的html,而不需要动态改变它,但是现在我需要解析一个包含动态元素的网页。这是我之前试图解析网页的代码,但无法找到元素,因为它们是在页面加载后添加的。问题是,如果一个页面使用了带有标记的谷歌地图,我会尝试刮去这些标记的图像。

    public static void main(String[] args) {
try {
    doc = Jsoup.connect("https://pokevision.com")
            .userAgent(
                    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36")
            .get();
} catch (IOException e) {
    e.printStackTrace();
}
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");

for (Element image : images) {
    System.out.println("src : " + image.attr("src"));
}

}

共有1个答案

宗政昱
2023-03-14

您面临的问题是,Jsoup检索静态源代码,因为它将被交付到浏览器。您需要的是调用javaScript后的DOM。为此,您可以使用HTMLUnit获取呈现的页面,然后将其内容传递给Jsoup进行解析。

// capture rendered page
WebClient webClient = new WebClient();
HtmlPage myPage = webClient.getPage("https://pokevision.com");

// convert to jsoup dom
Document doc = Jsoup.parse(myPage.asXml());

// extract data using jsoup selectors
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
for (Element image : images) {
    System.out.println("src : " + image.attr("src"));
}

// clean up resources
webClient.close();
 类似资料:
  • 问题内容: 我正在尝试将来自纽约证券交易所网站(http://www1.nyse.com/about/listed/IPO_Index.html)的表格抓取到熊猫数据框中。为了做到这一点,我有一个像这样的设置: 但是,当我在页面上运行此命令时,列表中返回的所有表实际上都是空的。当我进一步调查时,我发现该表是由javascript生成的。在我的Web浏览器中使用开发人员工具时,我看到该表看起来与带有

  • 我正在尝试解析引导程序的引导页生成的url。看起来像https://example.com/#page-2但是JSOUP不能解析它并显示主url。如何从Bootpage获取普通链接,或者如何使JSOUP解析它。 解析代码:

  • 保存到.xlsx的代码: 使用js-xlsx打开.xlsx的代码:

  • 问题内容: 我正在开发一个从网站上抓取数据的应用程序,我想知道应该如何获取数据。具体来说,我需要包含在使用特定CSS类的许多div标签中的数据-目前(出于测试目的)我只是在检查 在HTML的每一行中-都可以,但是我不禁感到有更好的解决方案。 有什么好方法可以给类添加一行HTML并提供一些好方法,例如: 问题答案: “ JTidy是HTML Tidy的Java端口,HTML Tidy是HTML语法检

  • 问题内容: 我试图解析由Bootstrap的Bootpage.js生成的URL,该URL看起来像但JSOUP无法解析它并显示主URL。如何从Bootpage获取正常链接或如何使JSOUP对其进行解析。 解析代码: 问题答案: ( 请参阅下面的UPDATE ,第一个/可接受的解决方案不符合android的要求,但仅供参考。) 桌面解决方案 HtmlUnit似乎无法处理此站点(最近经常发生这种情况)。

  • 我已经阅读了JavaParser手册,并开始构建自己的示例。我想要实现的是阅读Java代码并在其上插入新的代码行。具体来说,我想在每个和语句之前初始化一个计数器,并在语句体内部对计数器进行递增。我这样做的目的是为一组指定的运行运行运行新代码,并观察每个分支执行了多少次。我使用JavaParser来解析和添加代码,因为我想自动生成和运行所有东西。 例如,我们有以下简单的代码: 在解析之后,我想有如下