zoukankan      html  css  js  c++  java
  • htmlparser 精确提取的一些代码

    一、 
    Java代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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.     }  
  • 相关阅读:
    hdu5360 Hiking(水题)
    hdu5348 MZL's endless loop(欧拉回路)
    hdu5351 MZL's Border(规律题,java)
    hdu5347 MZL's chemistry(打表)
    hdu5344 MZL's xor(水题)
    hdu5338 ZZX and Permutations(贪心、线段树)
    hdu 5325 Crazy Bobo (树形dp)
    hdu5323 Solve this interesting problem(爆搜)
    hdu5322 Hope(dp)
    Lightoj1009 Back to Underworld(带权并查集)
  • 原文地址:https://www.cnblogs.com/Alex80/p/4775840.html
Copyright © 2011-2022 走看看