我正在开发一个从网站上删除数据的应用程序,我想知道如何获取数据.具体来说,我需要包含在许多使用特定CSS类的div标签中的数据 - 目前(用于测试目的)我只是在检查
div class = "classname"
在HTML的每一行 - 这是有效的,但我不禁觉得那里有更好的解决方案.
有没有什么好方法我可以给一个类一行HTML并有一些很好的方法,如:
boolean usesClass(String CSSClassname); String getText(); String getLink();
rajsite.. 59
另一个可能对HTML处理有用的库是jsoup.Jsoup尝试清除格式错误的HTML,并允许使用jQuery(如标记选择器语法)在Java中进行html解析.
http://jsoup.org/
另一个可能对HTML处理有用的库是jsoup.Jsoup尝试清除格式错误的HTML,并允许使用jQuery(如标记选择器语法)在Java中进行html解析.
http://jsoup.org/
前面提到的主要问题是格式错误的HTML,因此必须使用html清理器或HTML-XML转换器.一旦获得XML代码(XHTML),就有很多工具可以处理它.您可以使用简单的SAX处理程序来获取它,该处理程序仅提取您需要的数据或任何基于树的方法(DOM,JDOM等),甚至可以修改原始代码.
下面是一个示例代码,它使用HTML清理程序来获取使用某个类的所有DIV并打印出其中的所有Text内容.
import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.htmlcleaner.HtmlCleaner; import org.htmlcleaner.TagNode; /** * @author Fernando Miguélez Palomo*/ public class TestHtmlParse { static final String className = "tags"; static final String url = "http://www.stackoverflow.com"; TagNode rootNode; public TestHtmlParse(URL htmlPage) throws IOException { HtmlCleaner cleaner = new HtmlCleaner(); rootNode = cleaner.clean(htmlPage); } List getDivsByClass(String CSSClassname) { List divList = new ArrayList(); TagNode divElements[] = rootNode.getElementsByName("div", true); for (int i = 0; divElements != null && i < divElements.length; i++) { String classType = divElements[i].getAttributeByName("class"); if (classType != null && classType.equals(CSSClassname)) { divList.add(divElements[i]); } } return divList; } public static void main(String[] args) { try { TestHtmlParse thp = new TestHtmlParse(new URL(url)); List divs = thp.getDivsByClass(className); System.out.println("*** Text of DIVs with class '"+className+"' at '"+url+"' ***"); for (Iterator iterator = divs.iterator(); iterator.hasNext();) { TagNode divElement = (TagNode) iterator.next(); System.out.println("Text child nodes of DIV: " + divElement.getText().toString()); } } catch(Exception e) { e.printStackTrace(); } } }
几年前,我使用JTidy用于同样的目的:
http://jtidy.sourceforge.net/
"JTidy是HTML Tidy的Java端口,HTML语法检查器和漂亮的打印机.就像它的非Java表兄弟一样,JTidy可以用作清理格式错误和错误的HTML的工具.此外,JTidy提供了一个DOM接口.正在处理的文档,这有效地使您能够将JTidy用作实际HTML的DOM解析器.
JTidy是由Andy Quick编写的,后者后来退出了维护者职位.现在,JTidy由一群志愿者维护.
有关JTidy的更多信息可以在JTidy SourceForge项目页面上找到."
您可能对TagSoup感兴趣,TagSoup是一个能够处理格式错误的HTML的Java HTML解析器.XML解析器仅适用于格式良好的XHTML.
HTMLParser项目(http://htmlparser.sourceforge.net/)可能是一种可能性.在处理格式错误的HTML时似乎相当不错.以下代码段应该满足您的需求:
Parser parser = new Parser(htmlInput); CssSelectorNodeFilter cssFilter = new CssSelectorNodeFilter("DIV.targetClassName"); NodeList nodes = parser.parse(cssFilter);
杰里科:http://jericho.htmlparser.net/docs/index.html
易于使用,支持不良格式的HTML,很多例子.
让我们不要忘记Jerry,它的Java jQuery:一个快速简洁的Java库,它简化了HTML文档的解析,遍历和操作。包括使用css3选择器。
例:
Jerry doc = jerry(html); doc.$("div#jodd p.neat").css("color", "red").addClass("ohmy");
例:
doc.form("#myform", new JerryFormHandler() { public void onForm(Jerry form, Mapparameters) { // process form and parameters } });
当然,这些只是一些简单的例子,可以让您感觉到整体情况。