发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

开源Html分析器解析库对比

    
2013-12-05 09:09
赞助商链接

几乎所有已知的HTML解析器都是实现W3C DOM API(JAXP的API一部分,用于XML处理),并给你一个org.w3c.dom.Document,便于通过JAXP API直接使用。主要的区别通常是是否能分析有问题的html。大多数解析器是在一定程度上都宽容非结构非完整的HTML,如JTidy,NekoHTML,TagSoup和HtmlCleaner。您通常可以使用这种类型的HTML解析器对付比较“整洁”的HTML源,这样就可以使用W3C DOM和 JAXP API.

NekoHTML:


final DOMParser parser = new DOMParser();
try {
parser.parse(new InputSource(urlIS));
document = parser.getDocument();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


TagSoup:


final Parser parser = new Parser();
SAX2DOM sax2dom = null;
try {
sax2dom = new SAX2DOM();
parser.setContentHandler(sax2dom);
parser.setFeature(Parser.namespacesFeature, false);
parser.parse(new InputSource(urlIS));
} catch (Exception e) {
e.printStackTrace();
}
document = sax2dom.getDOM();


jTidy:


final Tidy tidy = new Tidy();
tidy.setQuiet(true);
tidy.setShowWarnings(false);
tidy.setForceOutput(true);
document = tidy.parseDOM(urlIS, null);


HtmlCleaner:

final HtmlCleaner cleaner = new HtmlCleaner(urlIS);
try {
cleaner.clean();
document = cleaner.createDOM();
} catch (Exception e) {
e.printStackTrace();
}


用以上代码做测试抓取文档html中链接标签,赢家是HtmlCleaner,它快速和容易实现。一个缺点HtmlCleaner是,它不提供一个Maven仓库。


HtmlUnit

HtmlUnit使您能够像一个在WebBrowser里面编程。输入表单的值,单击按钮,调用JavaScript等等。它不只是一个HTML解析器。是一个真正的“图形界面的web浏览器”和HTML的单元测试工具。


Jsoup:
提供一个完全自己的API。它给你像使用jQuery般的CSS选择器,并提供了一个灵活的API来遍历HTML DOM树来获得感兴趣的内容。

HTML DOM树的遍历是Jsoup的主要特征。有过org.w3c.dom.Document打交道的人知道这是多么痛苦的地狱,可以使用jsoup详细的NodeList和节点API来遍历DOM。当然,XPath的使生活更轻松,但是它难以学习。

如果你想从通常的现实世界HTML中提取特定数据,Jsoup是选择。

String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();

String text = doc.body().text(); // "An example link"
String linkHref = link.attr("href"); // "http://example.com/"
String linkText = link.text(); // "example""

String linkOuterH = link.outerHtml();
// "<a href="http://example.com"><b>example</b></a>"
String linkInnerH = link.html(); // "<b>example</b>"

详细见:http://jsoup.org/cookbook/extracting-data/attributes-text-html

2
html5     

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com