我对使用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"));
}
}
答案 0 :(得分: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();