org.htmlparser小结

org.htmlparser 主要用来解析HTML网页。


一、基本上HTML中的每个标签对应于一个类,例如:

p标签对应于ParagraphTag类

ul标签对应于BulletList类

li标签对应于Bullet类

a标签对应于LinkTag类

文本对应于TextNode类

span标签对应于Span类

div标签对应于Div类

等等。


二、包含多种类型的HTML过滤器,例如:

1、属性过滤器,例如查询id=‘123’的标签

HasAttributeFilter answerFilter = new HasAttributeFilter("id","123");

2、样式过滤器,例如查询class='entry-text'的div标签

CssSelectorNodeFilter answerFilter = new CssSelectorNodeFilter("div[class='entry-text']");

3、标签名过滤器,例如查询所有的h2标签

TagNameFilter h2TagName_list = new TagNameFilter("h2");

4、父节点过滤器,例如查询父节点符合h2TagName_list过滤器的所有标签,第二个参数表示是否递归,true表示递归查找,即父、父父、父父父、依次向上查找。

HasParentFilter hasParentOfLi_list = new HasParentFilter(h2TagName_list,true);

5、并 过滤器,即查询同时满足多个过滤器的标签

AndFilter listFilter = new AndFilter(new NodeFilter[]{过滤器1,过滤器2,过滤器3,.....});

6、或者 过滤器,即查询满足其中任何一个过滤器的标签

OrFilter answerFilter = new OrFilter(过滤器1, 过滤器2);

7、标签类过滤器,即查询这一类的标签

NodeClassFilter textFilter_detail = new NodeClassFilter(TextNode.class);

8、文本过滤器,即查询包含这一文本内容的所有文本标签

StringFilter stringOf10WhyFilter_detail = new StringFilter("hello");

9、不 过滤器,即查询不符合该过滤器的所有标签

NotFilter notStringOf10WhyFilter_detail = new NotFilter(过滤器1);

10、 LinkStringFilter,这个Filter用于判断链接中是否包含某个特定的字符串,可以用来过滤出指向某个特定网站的链接

NodeFilter filter = new LinkStringFilter("www.baizeju.com");

等等


三、对获取到的网页内容进行解析

NodeList questionNodeList = new Parser(content).parse(questionFilter);

其中content表示网页内容,字符串类型;

questionFilter表示过滤器,即在网页字符串中查找符合该过滤器的所有标签。

对于有些网页的解析可能会报如下错误:

org.htmlparser.util.ParserException: Error in opening a connection to java.io.IOException: Invalid argument.......

解决方法如下:

/**
     * 解析字符串
     * @param inputHTML String
     * @return Parser
     */
    public static Parser createParser(String inputHTML) {
        Lexer mLexer = new Lexer(new Page(inputHTML));
        return new Parser(mLexer,new DefaultParserFeedback(DefaultParserFeedback.QUIET));
    }

在createParser里面去做new Parser(),问题解决。

而上面的new Parser(content).parse(questionFilter);语句改成myParser = createParser(content).parse(questionFilter);就行了

你可能感兴趣的:(org.htmlparser小结)