HtmlParserExtraction.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:5k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter9;
  2. import org.htmlparser.util.*;
  3. import org.htmlparser.Parser;
  4. import org.htmlparser.filters.*;
  5. import org.htmlparser.tags.LinkTag;
  6. import org.htmlparser.NodeFilter;
  7. import org.htmlparser.nodes.TextNode;
  8. import org.htmlparser.lexer.*;
  9. import org.htmlparser.lexer.Stream;
  10. import org.htmlparser.Node;
  11. import java.io.*;
  12. import java.net.*;
  13. import org.htmlparser.http.ConnectionManager;
  14. import org.htmlparser.visitors.TextExtractingVisitor;
  15. import org.htmlparser.filters.TagNameFilter;
  16. import org.htmlparser.filters.HasSiblingFilter;
  17. import org.htmlparser.util.ParserException;
  18. public class HtmlParserExtraction {
  19.   public static void main (String[] args) throws ParserException
  20.   {
  21.   
  22.   try {
  23.   
  24.   //ParseHtmlText("http://www.bnu.edu.cn/","GB2312");
  25.   //getHtmlUrls("http://www.bnu.edu.cn/","GB2312");
  26.   //getBaiduUrls("http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=Lucene&pn=0&ver=0&cl=3","GB2312");
  27.   
  28.   getLexerUrls("http://www.bnu.edu.cn/","GB2312");
  29.   } catch(ParserException e)
  30.   {
  31.   e.printStackTrace();
  32.   }
  33.   
  34.     }
  35.   
  36.   
  37.   public static void getLexerUrls(String url , String pageEncoding) throws ParserException
  38.   { 
  39. Node node = null;
  40. Lexer lexer = null;
  41. try { 
  42. ConnectionManager connmgr;
  43.  
  44. connmgr = Page.getConnectionManager();           // 生成链接管理器
  45.     lexer = new Lexer(connmgr.openConnection(url));  // 生成分析器
  46.     
  47.     lexer.getPage().setEncoding(pageEncoding);       // 设置网页编码
  48.    
  49. node = lexer.nextNode();
  50. while(node != null ) {                           // 循环遍历每个节点
  51.    System.out.println(node.toString());
  52.    node = lexer.nextNode();
  53.    
  54.   }
  55. } catch (ParserException e) { 
  56.    e.printStackTrace();
  57.  }
  58.   }
  59.   
  60.   public static void getHtmlUrls(String url , String pageEncoding)  throws ParserException
  61.   { 
  62.   NodeList nodeList = null;
  63.   
  64.   try { 
  65.    Parser parser = new Parser(url);
  66.        parser.setEncoding(pageEncoding);                            // 设置解析编码格式
  67.    // 可以使用下面filter来取出url连接
  68.     //nodeList = parser.parse(new TagNameFilter("A"));          // 使用TagNameFilter
  69.    nodeList = parser.parse(new NodeClassFilter(LinkTag.class)); // 使用NodeClassFilter
  70.    } catch (ParserException e) { 
  71.    e.printStackTrace();
  72.    }
  73.    
  74.   if(nodeList != null && nodeList.size() > 0) {                 // 循环遍历每个Url节点
  75.    for(int i = 0; i < nodeList.size(); i ++) {
  76.    String urlLink = ((LinkTag)nodeList.elementAt(i)).extractLink();
  77.    String LinkName = ((LinkTag)nodeList.elementAt(i)).getLinkText();
  78.    
  79.    if( urlLink.indexOf("bnu") == 0 || urlLink.indexOf("http") == 0 )
  80.    //System.out.println(LinkName +" : "+ urlLink);
  81.    System.out.println( urlLink );
  82.     }
  83.   }   
  84.   
  85.   }
  86.      
  87.   public static void getBaiduUrls(String url , String pageEncoding)  throws ParserException
  88.   { 
  89.   NodeList nodeList = null;
  90.   try { 
  91.    Parser parser = new Parser(url);
  92.        parser.setEncoding(pageEncoding);                            // 设置解析编码格式
  93.    // Baidu 检索结果的url连接和标题
  94.        nodeList = parser.parse( new AndFilter( new HasAttributeFilter("target") , 
  95.                                         new HasAttributeFilter("onclick")));
  96.    } catch (ParserException e) { 
  97.    e.printStackTrace();
  98.    }
  99.   if(nodeList != null && nodeList.size() > 0) {                 // 循环遍历每个Url节点
  100.    for(int i = 0; i < nodeList.size(); i ++) {
  101.    String urlLink = ((LinkTag)nodeList.elementAt(i)).extractLink();
  102.    String LinkName = ((LinkTag)nodeList.elementAt(i)).getLinkText();
  103.    
  104.    if( urlLink.indexOf("bnu") == 0 || urlLink.indexOf("http") == 0 )
  105.    System.out.println("结果 "+ i +" 标题:"+LinkName);
  106.    System.out.println("       链接:"+urlLink );
  107.     }
  108.   }
  109.   }
  110.   
  111.   public static void ParseHtmlText(String url,String pageEncoding)  throws ParserException
  112.   {
  113.           Parser parser = new Parser(url);                              // 访问目标网站
  114.           parser.setEncoding(pageEncoding);                             // 设置解析编码格式
  115.           TextExtractingVisitor visitor = new TextExtractingVisitor (); // 生成文本内容抽取对象 
  116.           
  117.           NodeFilter textFilter = new NodeClassFilter(TextNode.class);  // 生成文本过滤器
  118.           
  119.           NodeList nodes = parser.extractAllNodesThatMatch(textFilter); // 利用文本过滤器解析文档
  120.           for (int i = 0; i < nodes.size(); i++)
  121.           {
  122.               TextNode textnode = (TextNode) nodes.elementAt(i);        // 获取文本节点
  123.               String line = textnode.toPlainTextString().trim();        // 转换成纯文本
  124.               if (line.equals("")) continue;
  125.               System.out.println(line);
  126.           }
  127.           
  128.           parser.visitAllNodesWith (visitor);                           // 访问网页所有节点 
  129.           System.out.println(visitor.getExtractedText());               // 输出网页正文
  130.   }
  131. }