首先 須要瞭解 一些 關於 網絡爬蟲的 基本知識:html
網絡爬蟲: 所謂的 爬蟲 就是一個 應用 程序, 這個 應用 程序 會 獲取 網絡中的 指定信息(網頁 數據).
例如百度: 啓動 這個 爬蟲 程序 會 自動 的 將 一些 網頁 數據 獲取 來 存到 百度的服務器上 提升了 搜索 效率.
咱們搜索的 時候 , 其實 搜索的 不是 網絡中的 內容, 而是 百度中的 內容, 而 百度就將 全部的 互聯網中的 數據 爬到 它 的服務器上邊 供人們 搜索.正則表達式
咱們 也能夠 寫一個 程序 去獲取 網絡中的 指定 資源.
例如: 獲取 網絡中的 郵箱(郵件地址), 用來 發廣告.
網絡 爬蟲: 實際上是一個 應用程序, 獲取 網絡中的 指定信息(符合 指定 規則的信息). String regex數據庫
這個例子中 須要用到的 Java 技術有: List 集合 Java 正則 表達式 Java IO 流 技術 Java 網絡 編程技術.編程
代碼以下: 這段 代碼 有一段 時 基於 本地文件的, 我在 爬 網絡 上的 資源時 先 試驗了 一下 本地的 文件.服務器
1 案例: 獲取 網絡中的 郵件 地址. 2 3 // *** 不管是 文件 仍是 網絡 僅僅是 數據源 變了. 4 */ 5 6 7 // *** 從 網頁 的 那些 字符串中 去 獲取 郵箱. find(); 8 9 File file = new File("tempfile\\mail.html"); 10 11 12 String regex = "\\w+@\\w+(\\.\\w+)+"; 13 14 // *** 告訴 去哪裏 爬 數據, 按照 什麼 規則爬. 15 // List<String> list = getMails(file,regex); // *** 獲得的 數據先 存到 集合中, 而後 遍歷集合 再 存到 數據庫中. 16 17 18 String str_url = "http://bbs.tianya.cn/post-enterprise-401802-6.shtml"; 19 List<String> list = getMailsByNet(str_url, regex); 20 21 22 23 for(String mail : list) { 24 25 System.out.println("List: " + mail); // *** 應該 存到 數據庫中. 26 27 } 28 29 30 } 31 32 // *** 基於 網絡. 33 34 public static List<String> getMailsByNet(String str_url, String regex) throws IOException{ 35 36 // 1. 將 str_url 封裝成 URL 對象, 由它來 幫咱們解析. 37 38 List<String> list = new ArrayList<String>(); 39 40 URL url = new URL(str_url); 41 42 // 2. 打開鏈接. 43 44 URLConnection conn = url.openConnection(); 45 46 // 3. 獲取 讀取流. 47 48 InputStream in = conn.getInputStream(); 49 // *** 將 字節流 轉換成 字符流, 加 高效, 一次 讀一行, 由於 正則 表達式 只對 字符串 有效. 50 51 BufferedReader bufIn = new BufferedReader(new InputStreamReader(in)); 52 53 // 4. 將 正則表達式 編譯成 對象. 54 55 Pattern p = Pattern.compile(regex); 56 57 // 5. 讀取數據. 58 59 String line = null; 60 61 while((line = bufIn.readLine()) != null) { 62 63 Matcher m = p.matcher(line); 64 65 while(m.find()) { 66 67 list.add(m.group()); 68 69 } 70 71 72 } 73 74 // *** 關閉資源. 75 bufIn.close(); 76 77 // *** 返回集合. 78 return list; 79 80 81 } 82 83 84 // *** 基於 本地文件. 85 86 // *** List 能夠 存 重複的, Set 集合 不能夠 存重複的. 87 public static List<String> getMails(File file, String regex) throws IOException { 88 89 // *** 建立一個 集合 , 存取 爬 到的 郵箱 數據. 90 91 List<String> list = new ArrayList<String>(); 92 93 94 // 1. 讀取文件. 加 高效, 一次 讀 一行. 95 96 BufferedReader bufr = new BufferedReader( new FileReader(file)); 97 98 // 2. 將 正則 規則 編譯成 對象. 99 100 Pattern p = Pattern.compile(regex); 101 102 String line = null; 103 104 while((line = bufr.readLine())!=null) { 105 106 Matcher m = p.matcher(line); // *** 文本 和 正則 對象 關聯. 107 108 109 while(m.find()) { 110 111 // System.out.println(m.group()); // *** 先存起來 , 建立 一個 集合. 112 113 list.add(m.group()); // *** 存到 集合中. 114 } 115 } 116 117 118 // System.out.println(line); 119 120 // *** 必定要 關閉 資源. 121 bufr.close(); 122 123 // *** 返回 集合. 124 return list; 125 126 127 } 128 } 129 130 // *** 瘋狂爬 網頁的實現, 只要保證 一點, 網址(URL) 一直在 變化, 能夠 爬 到 網頁中的 超連接 時, 修改 網址 進到 超連接的 網址, 如此下去 ,即是 瘋狂爬. 掛一天, 哈哈!!! 131 132 // *** 等 學習了 Javamail 程序 , 本身寫 一個 郵件 發送的 程序, 將 爬來的 郵箱 逐個 發廣告.
感謝 畢網絡