HTMLCleaner 使用方法及 XPath 语法初探
什么是 HTMLCleaner
HTMLCleaner 是一款 Java 语言编写的 HTML 解析器,可用于解析 HTML 字符串或从 URL 加载 HTML 文件。它提供了简单易用的 API,可以轻松地处理 HTML 文档,去除不必要的标签或属性,甚至可以进行格式化和验证等操作。
如何使用 HTMLCleaner
HTMLCleaner 的使用分以下几步:
- 创建 HTMLCleaner 实例
- 创建输入流及输出流
- 解析 HTML 文档
- 获取解析后的节点列表
- 获取节点的属性及内容
以下是示例代码:
import java.io.IOException;
import java.net.URL;
import java.util.List;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
public class HtmlCleanerDemo {
public static void main(String[] args) throws IOException {
// step 1
HtmlCleaner htmlCleaner = new HtmlCleaner();
CleanerProperties props = htmlCleaner.getProperties();
// step 2
URL url = new URL("http://www.example.com");
TagNode rootNode = htmlCleaner.clean(url);
// step 3
List<TagNode> nodes = rootNode.getElementListByAttValue("class", "content", true, false);
// step 4
for (TagNode node : nodes) {
// step 5
String title = node.findElementByName("h2", true).getText().toString();
String desc = node.findElementByName("p", true).getText().toString();
System.out.println("Title: " + title);
System.out.println("Description: " + desc);
}
}
}
该示例代码对 http://www.example.com 页面进行解析,获取 class 属性为 content 的节点列表,并输出对应节点的标题和描述。其中,步骤 3 使用了 getElementListByAttValue
方法,该方法可以根据节点属性值获取所有符合条件的节点;步骤 5 使用了 findElementByName
方法,该方法可以根据标签名称获取第一个符合条件的节点。
XPath 语法初探
XPath 是一种用于选择 XML 或 HTML 文档中节点的语言,它是 W3C 标准之一。HTMLCleaner 支持 XPath 语法,可以使用 XPath 表达式获取指定节点或属性。以下是一些常用的 XPath 语法示例:
/
: 从根节点开始选择//
: 选择所有符合条件的节点[@属性名=属性值]
: 根据属性名和属性值选择节点[@class='className']
: 根据 class 属性选择节点[@id='idName']
: 根据 id 属性选择节点[@name='nameAttribute']
: 根据 name 属性选择节点[@href]
: 选择带 href 属性的节点text()
: 选择节点的文本内容
以下是示例代码:
import java.io.IOException;
import java.net.URL;
import java.util.List;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
import org.htmlcleaner.XPather;
public class HtmlCleanerDemo {
public static void main(String[] args) throws IOException {
HtmlCleaner htmlCleaner = new HtmlCleaner();
CleanerProperties props = htmlCleaner.getProperties();
URL url = new URL("http://www.example.com");
TagNode rootNode = htmlCleaner.clean(url);
// 使用 XPath 获取节点列表
String xpath = "//div[@id='content']//a/text()";
Object[] xpathNodes = rootNode.evaluateXPath(xpath);
for (Object xpathNode : xpathNodes) {
System.out.println("Link Text: " + xpathNode.toString());
}
// 使用 XPath 获取节点属性值
xpath = "//div[@id='content']/a/@href";
XPather xPather = new XPather(xpath);
String[] hrefs = xPather.evaluateAgainstNode(rootNode);
for (String href : hrefs) {
System.out.println("Link Href: " + href);
}
}
}
该示例代码使用了两个 XPath 表达式,第一个表达式 //div[@id='content']//a/text()
获取 id 为 content 的 div 节点下所有 a 标签的文本内容;第二个表达式 //div[@id='content']/a/@href
获取 id 为 content 的 div 节点下所有 a 标签的 href 属性值。需要注意的是,在使用 XPather
类时需要额外捕捉 XPatherException
异常。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:htmlcleaner使用方法及xpath语法初探 - Python技术站