现在我们已经获取了 HTML 文档,但我们需要的是数据,这意味着我们需要将之前的响应解析为人类可读的信息。
让我们从小处着手,先提取网站的标题。我们可以借助内置方法 getTitleText 来实现:
String title = page.getTitleText();
System.out.println("Page Title: " + title);
接下来,让我们从网站中提取所有链接。为此,我们可以使用内置的 getAnchors 和 getHrefAttribute 方法,它们会从 HTML 中提取所有 <a> 标签,然后获取 href 属性的值:
List<HtmlAnchor> links = page.getAnchors();
for (HtmlAnchor link : links) {
String href = link.getHrefAttribute();
System.out.println("Link: " + href);
}
如您所见,HtmlUnit 提供了许多内置且直观易懂的方法,为您节省了大量查阅文档的时间。
让我们来看一个更贴近实际的例子。我们需要从网站中提取所有食谱,更准确地说,是提取它们的标题和地址。
如果你检查其中一张食谱卡片,会发现我们所需的所有信息都通过链接的属性提供,这意味着我们只需查找具有“card-link”类的链接并获取其属性即可。
List<?> anchors = page.getByXPath("//a[@class='card-link']");
for (int i = 0; i < anchors.size(); i++) {
HtmlAnchor link = (HtmlAnchor) anchors.get(i);
String recipeTitle = link.getAttribute("title").replace(',', ';');
String recipeLink = link.getHrefAttribute();
}
这次我们使用 XPath 表达式,在 HTML 文档中任意层级深度搜索链接。随后,遍历结果列表,并提取每个链接的标题和 href 属性。