• 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.     }  
  • 相关阅读:
    Java创建多线程的方法
    Spring Cloud 学习笔记 来自csdn
    Java线程退出
    Java线程的中断与插入
    Java守护线程
    Linux安装jdk
    内部类
    枚举,包类型
    jenkins
    设计模式之装饰者模式
  • 原文地址:https://www.cnblogs.com/Alex80/p/4775840.html
Copyright © 2020-2023  润新知