Java用正则表达式如何读取网页内容

时间:2022-09-19 11:18:14

学习java的正则表达式,抓取网页并解析HTML部分内容  

  1. package com.xiaofeng.picup; 
  2. import java.io.BufferedReader; 
  3. import java.io.IOException; 
  4. import java.io.InputStreamReader; 
  5. import java.net.MalformedURLException; 
  6. import java.net.URL; 
  7. import java.util.ArrayList; 
  8. import java.util.HashMap; 
  9. import java.util.List; 
  10. import java.util.regex.Matcher; 
  11. import java.util.regex.Pattern; 
  12. /** *//** 
  13. * 
  14. * @抓取页面文章标题及内容(测试) 手动输入网址抓取,可进一步自动抓取整个页面的全部内容 
  15. * 
  16. */ 
  17. public class WebContent ...{ 
  18.   /** *//** 
  19.    * 读取一个网页全部内容 
  20.    */ 
  21.   public String getOneHtml(String htmlurl) throws IOException...{ 
  22.     URL url; 
  23.     String temp; 
  24.     StringBuffer sb = new StringBuffer(); 
  25.     try ...{ 
  26.       url = new URL(htmlurl); 
  27.       BufferedReader in = new BufferedReader(new InputStreamReader(url 
  28.           .openStream(), "utf-8"));// 读取网页全部内容 
  29.       while ((temp = in.readLine()) != null) ...{ 
  30.         sb.append(temp); 
  31.       } 
  32.       in.close(); 
  33.     }catch(MalformedURLException me)...{ 
  34.       System.out.println("你输入的URL格式有问题!请仔细输入"); 
  35.       me.getMessage(); 
  36.       throw me; 
  37.     }catch (IOException e) ...{ 
  38.       e.printStackTrace(); 
  39.       throw e; 
  40.     } 
  41.     return sb.toString(); 
  42.   } 
  43.   /** *//** 
  44.    * 
  45.    * @param s 
  46.    * @return 获得网页标题 
  47.    */ 
  48.   public String getTitle(String s) ...{ 
  49.     String regex; 
  50.     String title = ""
  51.     List<String> list = new ArrayList<String>(); 
  52.     regex = "<title>.*?</title>"
  53.     Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ); 
  54.     Matcher ma = pa.matcher(s); 
  55.     while (ma.find()) ...{ 
  56.       list.add(ma.group()); 
  57.     } 
  58.     for (int i = 0; i < list.size(); i++) ...{ 
  59.       title = title + list.get(i); 
  60.     } 
  61.     return outTag(title); 
  62.   } 
  63.   /** *//** 
  64.    * 
  65.    * @param s 
  66.    * @return 获得链接 
  67.    */ 
  68.   public List<String> getLink(String s) ...{ 
  69.     String regex; 
  70.     List<String> list = new ArrayList<String>(); 
  71.     regex = "<a[^>]*href=("([^"]*)"|'([^']*)'|([^s>]*))[^>]*>(.*?)</a>"; 
  72.     Pattern pa = Pattern.compile(regex, Pattern.DOTALL); 
  73.     Matcher ma = pa.matcher(s); 
  74.     while (ma.find()) ...{ 
  75.       list.add(ma.group()); 
  76.     } 
  77.     return list; 
  78.   } 
  79.   /** *//** 
  80.    * 
  81.    * @param s 
  82.    * @return 获得脚本代码 
  83.    */ 
  84.   public List<String> getScript(String s) ...{ 
  85.     String regex; 
  86.     List<String> list = new ArrayList<String>(); 
  87.     regex = "<script.*?</script>"
  88.     Pattern pa = Pattern.compile(regex, Pattern.DOTALL); 
  89.     Matcher ma = pa.matcher(s); 
  90.     while (ma.find()) ...{ 
  91.       list.add(ma.group()); 
  92.     } 
  93.     return list; 
  94.   } 
  95.   /** *//** 
  96.    * 
  97.    * @param s 
  98.    * @return 获得CSS 
  99.    */ 
  100.   public List<String> getCSS(String s) ...{ 
  101.     String regex; 
  102.     List<String> list = new ArrayList<String>(); 
  103.     regex = "<style.*?</style>"
  104.     Pattern pa = Pattern.compile(regex, Pattern.DOTALL); 
  105.     Matcher ma = pa.matcher(s); 
  106.     while (ma.find()) ...{ 
  107.       list.add(ma.group()); 
  108.     } 
  109.     return list; 
  110.   } 
  111.   /** *//** 
  112.    * 
  113.    * @param s 
  114.    * @return 去掉标记 
  115.    */ 
  116.   public String outTag(String s) ...{ 
  117.     return s.replaceAll("<.*?>"""); 
  118.   }