我有一个关于解析文档以提取资源链接的最佳方式的问题。
你在这本食谱中展示:
以下构建 DOM 表示的方法:
Document doc = Jsoup.connect(url).get(); Elements links = doc.select("a[href]");
所以我不确定这是最有效的方式。
- 迭代 doc.getAllElements() 是否更好?
- 或者是否有某种等效的 SAX 解析器?
我在 3 月 3 日在 JSOUP googlegroups 上问过这个问题,但我不确定我的邮件是否通过了过滤器。
最佳答案
最有效的方法是使用 NodeTraversor
,它是访客模式的一个实现。它会像其他两个选项一样扫描整棵树,但是
- 不需要解析 CSS 查询并“动态”匹配它 - 与静态过滤器相比,JIT 优化自定义查询的可能性更小
- 它不会像
getAllElements()
那样将元素存储到列表中
不支持 SAX 解析模型,因为 Jsoup 总是创建一个 DOM 树,因此不需要功能较弱的 SAX。 HtmlCleaner
也是如此。
final List<Element> elements = new ArrayList<Element>();
new NodeTraversor(new NodeVisitor() {
public void head(Node node, int depth) {
if (node instanceof Element) {
Element element = (Element) node;
if(element.tagName().equalsIgnoreCase("a") && element.hasAttr("href")){
elements.add(element);
}
}
}
public void tail(Node node, int depth) {
}
}).traverse(doc);
return elements;
关于java - 在 JSOUP 中提取嵌入式资源链接的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19218305/