提问人:Ricardo Felgueiras 提问时间:3/23/2009 最后编辑:aymericRicardo Felgueiras 更新时间:9/13/2012 访问量:4466
如何在 HTML 文件中搜索某些标签?
How to search in a HTML file for some tags?
问:
我在 Java 中遇到了一点问题。 如何做到这一点:我想在 HTML 文件中搜索标签 href 和 src,然后我想获取与该标签关联的 URL。
最好的方法是什么?
感谢您的帮助。 此致敬意。
答:
您想将其作为一次性编辑任务来执行,还是需要一个系统(即代码)实现?在第二种情况下,找到一个 Java HTML 解析器实现并遍历 DOM 树。
http://java-source.net/open-source/html-parsers
如果你的文件是一个 xhtml 文档,那么它是一个标准的 xml 文档,解析它的最佳方法是使用 jdom。JDom 功能强大,易于使用和理解。
如果你有一个 html 文档,你可以尝试 htmlparser,具体来说是 LinkTag 类。
我使用的答案是 JTidy
您可以使用 Rhino,然后加载 html 文件。加载后,您可以使用 getElementBy 转到任何节点或获取值。
我会看看 tagsoup,它将从任何 HTML 文档构建 DOM 树,即使是最不合规的文档。
然后使用 XPath 并循环访问由以下人员返回的 NodeList:
一个
和
IMG的
这是我用来完成你想做的事情的代码,但首先让我给你一些提示。
如果您处于 Java Swing 环境中,请确保使用 javax.swing.text.html 和 javax.swing.text.html.parser 包中的方法。不幸的是,它们主要用于 JEditorPane,但我仍然强烈建议您查看这些。
Java 6 API 中有一个名为 HTML 的类。标识 HTML 开始和结束标记的标记,然后可以使用这些标记来确定希望程序遵循的链接的位置。http://java.sun.com/javase/6/docs/api/javax/swing/text/html/HTML.Tag.html
当我编写一个与此非常相似的程序时,我使用了 3 种主要方法:
public void handleStartTag(HTML.Tag t, MUtableAttributeSet atts, int pos)
public void handleEndTag(HTML.Tag t, int pos)
public void handleText(char[] text, int pos)
如果您需要有关如何编写这些方法的更多帮助,可以给我发消息,但基本上,您正在寻找初始标签和结束标签,然后从中您将识别 url,然后您可以继续下一步,即遵循 url。
要遵循 url,我建议您使用 JEditorPane 对象。javax.swing.event.HyperlinkListener 接口只定义了一个方法 hyperlinkUpdate(HyperlinkEvent e),您可以将 url 传递到该方法中,然后在 JEditorPane 对象上调用 .setPage(evt.getURL())。然后,这将使用新页面更新窗格,并允许您再次启动该过程。
如果您有任何疑问,请给我发消息,请投票给这个答案!
我已经成功地将 Neko HTML 解析器用于此类事情(屏幕抓取)。
import org.cyberneko.html.parsers.DOMParser; import org.w3c.dom.Node; public class TestParser { public static void main(String[] argv) throws Exception { DOMParser parser = new DOMParser(); for (int i = 0; i
上一个:可变顺序正则表达式语法
评论