htmlparser 精确提取的一些代码

时间:2022-11-10 18:18:12
一、 
Java代码   htmlparser 精确提取的一些代码
  1. ConnectionManager manager = Page.getConnectionManager();  
  2.         Parser parser = new Parser(manager  
  3.                 .openConnection("http://www.verycd.com/topics/2760827/"));  
  4.         parser.setEncoding("GBK");  
  5.           
  6.         //提取a标签里的img图片链接  
  7. //      NodeFilter filter = new AndFilter(new TagNameFilter("a"),  
  8. //              new HasChildFilter(new TagNameFilter("img")));  
  9. //      NodeFilter filter = new TagNameFilter("title");  
  10.           
  11.         //提取input里面的东西  
  12.         NodeFilter filter = new AndFilter(new TagNameFilter("input"),  
  13.                 new HasAttributeFilter("class","forminput"));  
  14.           
  15. //      NodeList nodeList = parser.parse(filter);  
  16.           
  17.         NodeList nodeList = parser.extractAllNodesThatMatch(filter);  
  18.           
  19.         NodeIterator it = nodeList.elements();  
  20.         while (it.hasMoreNodes()) {  
  21.             Node node = it.nextNode();  
  22.             System.out.println(node.toHtml());  
  23.         }  
  24.     }  


二、 
Java代码   htmlparser 精确提取的一些代码
  1. // 获取一个网页上所有的链接和图片链接  
  2.   public static void extracLinks(String url) {  
  3.     try {  
  4.       Parser parser = new Parser(url);  
  5.       parser.setEncoding("gb2312");  
  6. //过滤 <frame> 标签的 filter,用来提取 frame 标签里的 src 属性所、表示的链接  
  7.       NodeFilter frameFilter = new NodeFilter() {  
  8.         public boolean accept(Node node) {  
  9.           if (node.getText().startsWith("frame src=")) {  
  10.             return true;  
  11.           } else {  
  12.             return false;  
  13.           }  
  14.         }  
  15.       };  
  16. //OrFilter 来设置过滤 <a> 标签,<img> 标签和 <frame> 标签,三个标签是 or 的关系  
  17.    OrFilte rorFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new  
  18. NodeClassFilter(ImageTag.class));  
  19.    OrFilter linkFilter = new OrFilter(orFilter, frameFilter);  
  20.   //得到所有经过过滤的标签  
  21.   NodeList list = parser.extractAllNodesThatMatch(linkFilter);  
  22.   for (int i = 0; i < list.size(); i++) {  
  23.     Node tag = list.elementAt(i);  
  24.     if (tag instanceof LinkTag)//<a> 标签  
  25.     {  
  26.       LinkTag link = (LinkTag) tag;  
  27.       String linkUrl = link.getLink();//url  
  28.       String text = link.getLinkText();//链接文字  
  29.       System.out.println(linkUrl + "**********" + text);  
  30.     }  
  31.     else if (tag instanceof ImageTag)//<img> 标签  
  32.     {  
  33.       ImageTag image = (ImageTag) list.elementAt(i);  
  34.       System.out.print(image.getImageURL() + "********");//图片地址  
  35.       System.out.println(image.getText());//图片文字  
  36.     }  
  37.     else//<frame> 标签  
  38.     {  
  39. //提取 frame 里 src 属性的链接如 <frame src="test.html"/>  
  40.       String frame = tag.getText();  
  41.       int start = frame.indexOf("src=");  
  42.       frame = frame.substring(start);  
  43.       int end = frame.indexOf(" ");  
  44.       if (end == -1)  
  45.         end = frame.indexOf(">");  
  46.       frame = frame.substring(5, end - 1);  
  47.       System.out.println(frame);  
  48.     }  
  49.   }  
  50. catch (ParserException e) {  
  51.       e.printStackTrace();  
  52. }  
  53. }  


三、 
Java代码   htmlparser 精确提取的一些代码
  1. public void test2() throws ParserException{  
  2.     ConnectionManager manager = Page.getConnectionManager();  
  3.     Parser parser = new Parser(manager.openConnection("http://www.verycd.com/sto/datum/computer/page1"));  
  4.     //提取A标签,他有一个父标签为H3  
  5.     NodeFilter filter = new AndFilter(new TagNameFilter("a"),new HasParentFilter(new TagNameFilter("h3")));  
  6.       
  7.     NodeList nodes = parser.parse(filter);  
  8.     NodeIterator it = nodes.elements();  
  9.     while (it.hasMoreNodes()) {  
  10.         Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!  
  11.         if (node instanceof LinkTag) {  //转换  
  12.             LinkTag linkNode = (LinkTag) node;  
  13.             System.out.println("http://www.verycd.com"+linkNode.getAttribute("href"));  
  14.         }  
  15.     }  
  16.       
  17. }  


四、
Java代码   htmlparser 精确提取的一些代码
  1. ConnectionManager manager = Page.getConnectionManager();  
  2.     Parser parser = new Parser(manager.openConnection("http://huodong.sodao.com/39/info#"));  
  3.       
  4.     NodeFilter filter = new StringFilter("减价幅度");  //用了StringFilter,可以立即提取出所在的text节点  
  5.       
  6.     NodeList nodes = parser.parse(filter);  
  7.     NodeIterator it = nodes.elements();  
  8.     while (it.hasMoreNodes()) {  
  9.         Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!  
  10.           
  11.         System.out.println(node.getParent().toHtml());  //通过indexof方法提取想要的text  


五、 
Java代码   htmlparser 精确提取的一些代码
  1. /** 
  2.  * 用htmlparser提取图片的几种方法 
  3.  */  
  4. public class Test {  
  5.       
  6.     static Parser parser = new Parser();  
  7.       
  8.     public static void test1(String url) throws ParserException{  
  9.           
  10.         Parser parser = new Parser();  
  11.         parser.setURL(url);  
  12.         parser.setEncoding("GBK");  
  13.           
  14.         //第一种方法  
  15.         NodeFilter imageFilter = new NodeFilter() {  
  16.                public boolean accept(Node node) {  
  17.                 return (node instanceof ImageTag);  
  18.                }    
  19.         };  
  20.           
  21.         NodeList images = parser.extractAllNodesThatMatch(imageFilter);  
  22.           
  23. //      第二种方法  
  24. //      NodeFilter imageFilter = new TagNameFilter("img");  
  25.         //第三种方法  
  26. //      NodeFilter imageFilter = new NodeClassFilter(ImageTag.class);  
  27. //      NodeList images = parser.parse(imageFilter);  
  28.           
  29.         System.out.println("Size: " + images.size());  
  30.           
  31.         for(NodeIterator it = images.elements(); it.hasMoreNodes();){  
  32.             ImageTag node = (ImageTag) it.nextNode();  
  33.               
  34.             System.out.println(node.getAttribute("src"));  
  35.         }  
  36.           
  37.           
  38.     }  
  39.       
  40.     public static void test2(String url) throws ParserException {  
  41.         Parser parser = new Parser();  
  42.         parser.setURL(url);  
  43.         parser.setEncoding("GBK");  
  44.           
  45.         NodeFilter divFilter = new AndFilter(new TagNameFilter("div"),new HasAttributeFilter("id","text_content"));  
  46.         NodeList divs = parser.parse(divFilter);  
  47.         System.out.println(removeTag(divs.elementAt(0).toHtml()));  
  48.     }  
  49.       
  50.   
  51.   
  52.     public static String removeTag(String content) {  
  53.   
  54.         if (null != content && !"".equals(content.trim())) {  
  55.           
  56.             while (content.indexOf("<") >=0 && content.indexOf(">") >= 0) {  
  57.                 int i = content.indexOf("<");  
  58.                 int j = content.indexOf(">");  
  59.                 if (i < j) {  
  60.                     String contetn1 = content.substring(0, i);  
  61.                     String content2 = content.substring(j + 1,  
  62.                             content.length() );  
  63.                     content = contetn1 + content2;  
  64.                 }   
  65.             }  
  66.               
  67.         }  
  68.         return content;  
  69.     }  
  70.       
  71.     public static void main(String[] args) throws ParserException {  
  72.         String url = "http://news.dayoo.com/china/200908/11/53868_10386441.htm";  
  73.         Test.test2(url);  
  74.     }  
  75.   
  76. }  
  77.   
  78. =====================================================================  
  79. /** *//** 
  80.      * 分别读纯文本和链接. 
  81.      * @param result 网页的内容 
  82.      * @throws Exception 
  83.      */  
  84.     public static void readTextAndLinkAndTitle(String result) throws Exception {  
  85.         Parser parser;  
  86.         NodeList nodelist;  
  87.         parser = Parser.createParser(result, "utf8");  
  88.         NodeFilter textFilter = new NodeClassFilter(TextNode.class);  
  89.         NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);  
  90.         NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);  
  91.         OrFilter lastFilter = new OrFilter();  
  92.         lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter, titleFilter });  
  93.         nodelist = parser.parse(lastFilter);  
  94.         Node[] nodes = nodelist.toNodeArray();  
  95.         String line = "";  
  96.          
  97.         for (int i = 0; i < nodes.length; i++) {  
  98.             Node node = nodes[i];  
  99.             if (node instanceof TextNode) {  
  100.                 TextNode textnode = (TextNode) node;  
  101.                 line = textnode.getText();  
  102.             } else if (node instanceof LinkTag) {  
  103.                 LinkTag link = (LinkTag) node;  
  104.                 line = link.getLink();  
  105.             } else if (node instanceof TitleTag) {  
  106.                 TitleTag titlenode = (TitleTag) node;  
  107.                 line = titlenode.getTitle();  
  108.             }  
  109.              
  110.             if (isTrimEmpty(line))  
  111.                 continue;  
  112.             System.out.println(line);  
  113.         }  
  114.     }  


六、 
Java代码   htmlparser 精确提取的一些代码
  1. /**  
  2.      * @author rrong_m  
  3.      * @throws ParserException  
  4.      */   
  5.     public static void getWords(String url) throws ParserException {   
  6.         Parser parser = new Parser(url);   
  7.         NodeFilter filter = new HasAttributeFilter("id", "word_more_con");   
  8.         NodeList nodelist = parser.extractAllNodesThatMatch(filter);   
  9.         NodeFilter filter1 = new NodeClassFilter(LinkTag.class);   
  10.         nodelist = nodelist.extractAllNodesThatMatch(filter1, true);   
  11.         for (int i = 0; i < nodelist.size(); i++) {   
  12.             LinkTag link = (LinkTag) nodelist.elementAt(i);   
  13.             System.out.println(link.getLinkText() + ":" + link.getLink());   
  14.         }   
  15.     }   

七、处理html里面的table 
Java代码   htmlparser 精确提取的一些代码
  1. public List getChangyu(String id) throws HttpException, IOException, ParserException   
  2.     {   
  3.         HttpClient hc=new HttpClient();   
  4.         hc.getParams().setContentCharset("gb2312");   
  5.         PostMethod pm=new PostMethod("http://61.145.121.47/custSearch.jsp");   
  6.         pm.setParameter("bnos","111111111111");   
  7.         hc.executeMethod(pm);   
  8.         String temp=pm.getResponseBodyAsString(50000);//设置获取html代码的数量,否则会报错,过大   
  9.         //System.out.print(temp);   
  10.         Parser parser=new Parser(temp);   
  11.         NodeFilter filter=new HasAttributeFilter("cellpadding","-1");   
  12.         NodeList nodelist=parser.extractAllNodesThatMatch(filter);   
  13.            
  14.         if(nodelist.size()>0)   
  15.         {   
  16.             NodeFilter filter1=new NodeClassFilter(TableTag.class);   
  17.             nodelist=nodelist.extractAllNodesThatMatch(filter1,true);   
  18.             if(nodelist.size()>0)   
  19.             {   
  20.                 TableTag table=(TableTag) nodelist.elementAt(0);   
  21.                 TableRow [] rows=table.getRows();   
  22.                 if(rows.length>1)   
  23.                 {   
  24.                     for(int i=2;i<rows.length;i++)   
  25.                     {   
  26.                         TableRow row=rows[i];   
  27.                         TableColumn td=row.getColumns()[0];   
  28.                         TableColumn td1=row.getColumns()[1];   
  29.                         System.out.println(td.toPlainTextString()+" "+td1.toPlainTextString());   
  30.                     }   
  31.                 }   
  32.             }   
  33.         }   
  34.         else   
  35.         {   
  36.                
  37.         }   
  38.         return null;   
  39.     }   


八、查询IP 
Java代码   htmlparser 精确提取的一些代码
  1. public static void getIp(String ip) throws ParserException   
  2. {   
  3.     String url="http://www.ip138.com/ips.asp?ip="+ip;   
  4.     Parser parser=new Parser(url);   
  5.     parser.setEncoding("gb2312");//设置编码否则得到的是乱码51jsp.cn   
  6.     NodeList nodelist=null;   
  7.     NodeFilter filter=new HasAttributeFilter("class","ul1");//定义过滤51jsp.cn   
  8.     nodelist=parser.extractAllNodesThatMatch(filter);   
  9.     if(nodelist.size()>0)   
  10.     {   
  11.         System.out.println("您查询的IP为:"+ip);   
  12.         System.out.println(nodelist.elementAt(0).toPlainTextString());   
  13.     }   
  14.        
  15. }   
  16. public static void main(String[] args) throws ParserException {   
  17.     getIp("125.33.192.180");   
  18. }   


九、提取html里面的p标签里面的内容 
Java代码   htmlparser 精确提取的一些代码
  1. public static ArrayList <String> getParagraphList( String content){  
  2.           
  3.         ArrayList <String> paraList=new ArrayList <String>();  
  4.           
  5.         Parser myParser=new Parser();  
  6.         NodeList nodeList = null;  
  7.        
  8.         NodeFilter paraFilter = new NodeClassFilter(ParagraphTag.class);  
  9.         try {  
  10.               
  11.             myParser.setInputHTML(content);  
  12.             nodeList = myParser.parse(paraFilter);  
  13.             for (int i = 0; i <= nodeList.size(); i++) {  
  14.                   
  15.              ParagraphTag tag = (ParagraphTag) nodeList.elementAt(i);  
  16.                
  17.              if(tag!=null){  
  18.               //   System.out.println(tag.getStringText());  
  19.                //  System.out.println("***********************************");  
  20.                  paraList.add(tag.getStringText());  
  21.              }      
  22.   
  23.             }   
  24.   
  25.         } catch (ParserException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.       
  29.         return paraList;  
  30.                   
  31.     }