首先 须要了解 一些 关于 网络爬虫的 基本知识: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 程序 , 本身写 一个 邮件 发送的 程序, 将 爬来的 邮箱 逐个 发广告.
感谢 毕网络