【问题标题】:Java parsing html elements generated by JSJava解析JS生成的html元素
【发布时间】:2016-11-28 06:13:40
【问题描述】:

我对使用 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"));
}

}

因此,由于显然 JSoup 无法执行此操作,我可以使用哪些其他库来查找图像源。

【问题讨论】:

标签: java parsing web-scraping html-parsing jsoup


【解决方案1】:

您面临的问题是Jsoup 检索静态源代码,因为它将被传递到浏览器。您想要的是调用 javaScript 后的 DOM。为此,您可以使用HTML Unit 获取渲染后的页面,然后将其内容传递给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();

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2020-06-22
    • 2015-01-03
    • 2023-01-04
    • 1970-01-01
    相关资源
    最近更新 更多