关闭

HtmlParser学习系列 -- 学习总结

标签: HtmlParser
268人阅读 评论(0) 收藏 举报
分类:

http://huangrongyou.iteye.com/blog/1748694

引入主要包

   htmlparser.jar

 

 

解析HtmlParser的主要步骤:

    解析出html中url

 

 

Java代码  收藏代码
  1. //      Parser parser = new Parser( (HttpURLConnection) (new URL("http://www.google.com")).openConnection() );  
  2.   
  3.         Parser parser = new Parser();       
  4.         parser.setEncoding(parser.getEncoding());       
  5.         parser.setURL("http://www.google.com");   
  6.         NodeFilter filter = new NodeClassFilter(LinkTag.class);       
  7.         NodeList list = parser.extractAllNodesThatMatch(filter);       
  8.         for (int i = 0; i < list.size(); i++) {           
  9.             LinkTag node = (LinkTag) list.elementAt(i);           
  10.             System.out.println(node.extractLink());       
  11.         }  
 

 

 

 

Visitor方式解析Html 

   使用visitor方式访问Html,一般不用这种方式,不细说

        //通过指定URLConnection对象创建Parser对象 

Java代码  收藏代码
  1. Parser parser = new Parser((HttpURLConnection)(new URL("http://www.google.com")).openConnection());   
  2. //设置Parser对象的字符编码,一般与网页的字符编码保持一致   
  3.       parser.setEncoding("GB2312");   
  4.       //创建LinkFindingVisitor对象   
  5.       LinkFindingVisitor lvisitor = new LinkFindingVisitor("http://www.google.com");   
  6.       //查找http://www.qq.com的链接个数   
  7.       parser.visitAllNodesWith(lvisitor);   
  8.       System.out.println("网页中包含http://www.google.com的链接个数:"+lvisitor.getCount());   
 

 

Filter方式解析HTML

    HtmlParser也可以解析文本在本地:

 

Java代码  收藏代码
  1. Parser parser = new Parser("d:\\1.html");  
  2. parser.setEncoding(parser.getEncoding());     
  3. NodeFilter filter = new NodeClassFilter(LinkTag.class);       
  4. NodeList list = parser.extractAllNodesThatMatch(filter);       
  5. for (int i = 0; i < list.size(); i++) {           
  6.     LinkTag node = (LinkTag) list.elementAt(i);           
  7.     System.out.println(node.extractLink());       
  8. }  
 

 

 

 

HtmlParser自带的Filter

TagNameFilter 接受所有满足指定Tag名的TagNodes.

 

Java代码  收藏代码
  1. TagNameFilter filter = new TagNameFilter("a");  
  2. NodeList nodeList = parser.parse(filter);  

NodeClassFilter 接受所有接受指定的类的节点.

 

Java代码  收藏代码
  1. NodeFilter filter = new NodeClassFilter(LinkTag.class);  //如链接标签  
  2. 或  
  3. NodeFilter filter = new NodeClassFilter(TextNode.class); //如文本标签  
  4. NodeList nodeList = parser.parse(filter);  
  5. Node[] nodes = nodeList.toNodeArray();  //返回Node[]节点数组的情况  
  6. 或  
  7. NodeClassFilter filter = new NodeClassFilter(TableTag.class);对表格的过滤获取  
  8. NodeList nodeList = parser.parse(filter);  
  9. TableTag tableTag = (TableTag) nodeList.elementAt(0);  
  10. TableRow[] rows = tableTag.getRows();  

HasAttributeFilter 接受所有否含有某个属性(还可以设置该属性的值)的节点.

HasChildFilter 接受所有含有子节点符合该Filter的节点.

 

Java代码  收藏代码
  1. TagNameFilter filter = new TagNameFilter(tag);  
  2. HasChildFilter hasChildFilter = new HasChildFilter(filter);  
  3. NodeList nodeList = parser.parse(hasChildFilter);  

HasParentFilter 接受所有含有父节点符合该Filter的节点.

 

LinkRegexFilter 接受所有linkTag标签的link值.匹配给定的正则表达式的节点.

LinkStringFilter 接受所有linkTag标签的link值,匹配给定的字符串的节点.

 

AndFilter 相当于一个AND操作符,接受所有同时满足两个Filter的节点.

NotFilter 接受所有不符合Filter的节点.

OrFilter 相当于一个AND操作符,接受所有满足两个Filter中任意一个的节点.

XorFilter 相当于一个XOR操作符,接受所有只满足其中1个Filter的节点.

 

RegexFilter 接受所有满足指定正则表达式的String Nodes.

StringFilter 接受所有满足指定String的String Nodes.

IsEqualFilter 接受所有和某个特定的节点相同的节点.

 

CssSelectorNodeFilter 接受所有支持CSS2选择器的节点.

HasSiblingFilter 接受所有含有兄弟节点符合该Filter的节点.

Java代码  收藏代码
  1. TagNameFilter filter = new TagNameFilter(tag);  
  2. HasSiblingFilter hasSiblingFilter = new HasSiblingFilter(filter);  
  3. NodeList nodeList = parser.parse(hasSiblingFilter);  

 

 

Tag类

    主要和NodeClassFilter配合使用

 

Remark:注释,

AppletTag:

BaseHrefTag,:

BodyTag:"BODY";//getBody();内部调用额是toPlainTextString();

Bullet:"LI"

BulletList:"UL","OL"

CompositeTag:

DefinitionList:"DL"

DefinitionListBullet:"DD","DT"

Div:"DIV"

DoctypeTag,:"!DOCTYPE"

FormTag,:

FrameSetTag:

FrameTag:

HeadingTag:"H1","H2","H3","H4","H5","H6"

HeadTag:"HEAD"

Html:"HTML"

ImageTag:

InputTag:"INPUT"

JspTag:"%","%=","%@"

LabelTag:"LABEL"

LinkTag

MetaTag:

ObjectTag:

OptionTag:

ParagraphTag:"P"

ProcessingInstructionTag:"?"

ScriptTag,:

SelectTag:"SELECT"

Span:"SPAN"

StyleTag:"STYLE"

TableColumn:"TD"

TableHeader:"TH"

TableRow:"TR"

TableTag:"TABLE"

TagNode:

TextareaTag:"TEXTAREA"

TitleTag:"TITLE"

TextNode:

 

 

Htmlparser结构

Tag分为简单Tag和复杂Tag


 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:96914次
    • 积分:1531
    • 等级:
    • 排名:千里之外
    • 原创:43篇
    • 转载:89篇
    • 译文:0篇
    • 评论:1条
    最新评论