我正在尝试使用Java上的Jsoup解析项目。 当我打开我正在尝试阅读的网站的源代码时
<ul class="myptab typ3">
<li><span class="active"><a href="#;" id="ONE_TO_ONE">1+1</a></span></li>
<li><span><a href="#;" id="TWO_TO_ONE">2+1</a></span></li>
</ul>
<h5 class="invisible" >1+1 itemlist</h5>
<div class="tblwrap mt50">
<ul class="prod_list">
</ul>
<div class="paging">
</div>
</div>
<h5 class="invisible">2+1 itemlist</h5>
<div class="tblwrap mt50">
<ul class="prod_list">
</ul>
<div class="paging">
</div>
</div>
在此源代码中列出了1 + 1部分或2 + 1部分,但是当我使用inspect来查看1 + 1部分项目上的源代码时,
<h5 class="invisible">1+1 itemlist</h5>
<div class="tblwrap mt50"> ==$0
<ul class="prod_list">
<li>
<div class="prod_box">
<p class="img"></p>
<p class="title">mangomilk_pet_300ML</p>
</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
它突然出现了。
所以我想从源代码中隐藏的span项中选择p.title和p.img。
答案 0 :(得分:0)
看起来内容是由javascript动态构建的。在这种情况下, jsoup 是不够的。您可以尝试使用 jBrowserDriver ,它能够检索已完成的DOM(带有渲染的javascript部分)。
示例代码:
// Represents result item
public class ProductBox {
private final String image;
private final String title;
public ProductBox(String image, String title) {
this.image = image;
this.title = title;
}
public String getImage() { return image; }
public String getTitle() { return title; }
}
// Method responsible for parsing a page
public void processPage(String url) {
JBrowserDriver driver = new JBrowserDriver(Settings
.builder()
.timezone(Timezone.AMERICA_NEWYORK)
.userAgent(UserAgent.CHROME)
.build());
driver.get(url);
String pageSource = driver.getPageSource();
driver.quit();
Document doc = Jsoup.parse(pageSource);
Elements prodBoxes = doc.select("ul.prod_list div.prod_box");
List<ProductBox> products = prodBoxes.stream()
.map(e -> new ProductBox(e.select("p.img").text(), e.select("p.title").text()))
.collect(Collectors.toList());
products.forEach(e -> System.out.printf("%s - %s\n", e.getImage(), e.getTitle()));
}