【问题标题】:Most performing way to extract links to embedded resources in JSOUP在 JSOUP 中提取嵌入式资源链接的最佳执行方式
【发布时间】:2013-10-07 06:28:23
【问题描述】:

我有一个关于解析文档以提取资源链接的最佳方式的问题。

您在这本食谱中的表现:

以下构建 DOM 表示的方法:

    Document doc = Jsoup.connect(url).get();
    Elements links = doc.select("a[href]");

所以我不确定这是最有效的方式。

  • 迭代 doc.getAllElements() 是否更好?
  • 或者是否有某种等效的 SAX 解析器?

我在 3 月 3 日在 JSOUP googlegroups 上提出了这个问题,但我不确定我的邮件是否通过了过滤器。

【问题讨论】:

    标签: java html performance parsing jsoup


    【解决方案1】:

    最有效的方法是使用NodeTraversor,它是访问者模式的一种实现。它将像其他两个选项一样扫描整个树,但是

    • 它不需要解析 CSS 查询并“动态”匹配它 - 与静态过滤器相比,JIT 优化自定义查询不太可能
    • 它不会像getAllElements()那样将元素存储到列表中

    不支持 SAX 解析模型,因为 Jsoup 总是创建一个 DOM-tree,所以不需要能力较差的 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;
    

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 2023-03-03
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2011-09-21
      • 2021-07-17
      相关资源
      最近更新 更多