首先 需要了解 一些 关于 网络爬虫的 基本知识:

网络爬虫: 所谓的 爬虫 就是一个 应用 程序, 这个 应用 程序 会 获取 网络中的 指定信息(网页 数据).

例如百度: 启动 这个 爬虫 程序 会 自动 的 将 一些 网页 数据 获取 来 存到 百度的服务器上 提高了 搜索 效率.

我们搜索的 时候 , 其实 搜索的 不是 网络中的 内容, 而是 百度中的 内容, 而 百度就将 所有的 互联网中的 数据 爬到 它 的服务器上边 供人们 搜索.

我们 也可以 写一个 程序 去获取 网络中的 指定 资源.

例如: 获取 网络中的 邮箱(邮件地址), 用来 发广告.
网络 爬虫: 其实是一个 应用程序, 获取 网络中的 指定信息(符合 指定 规则的信息). String regex

这个例子中 需要用到的 Java 技术有:  List 集合  Java 正则 表达式  Java IO 流 技术  Java 网络 编程技术.

代码如下:   这段 代码 有一段 时 基于 本地文件的, 我在 爬 网络 上的 资源时 先 试验了 一下 本地的 文件.

     案例:  获取 网络中的 邮件 地址.

             // *** 无论是 文件 还是 网络 仅仅是 数据源 变了.
*/ // *** 从 网页 的 那些 字符串中 去 获取 邮箱. find(); File file = new File("tempfile\\mail.html"); String regex = "\\w+@\\w+(\\.\\w+)+"; // *** 告诉 去哪里 爬 数据, 按照 什么 规则爬.
// List<String> list = getMails(file,regex); // *** 得到的 数据先 存到 集合中, 然后 遍历集合 再 存到 数据库中. String str_url = "http://bbs.tianya.cn/post-enterprise-401802-6.shtml";
List<String> list = getMailsByNet(str_url, regex); for(String mail : list) { System.out.println("List: " + mail); // *** 应该 存到 数据库中. } } // *** 基于 网络. public static List<String> getMailsByNet(String str_url, String regex) throws IOException{ // 1. 将 str_url 封装成 URL 对象, 由它来 帮我们解析. List<String> list = new ArrayList<String>(); URL url = new URL(str_url); // 2. 打开连接. URLConnection conn = url.openConnection(); // 3. 获取 读取流. InputStream in = conn.getInputStream();
// *** 将 字节流 转换成 字符流, 加 高效, 一次 读一行, 因为 正则 表达式 只对 字符串 有效. BufferedReader bufIn = new BufferedReader(new InputStreamReader(in)); // 4. 将 正则表达式 编译成 对象. Pattern p = Pattern.compile(regex); // 5. 读取数据. String line = null; while((line = bufIn.readLine()) != null) { Matcher m = p.matcher(line); while(m.find()) { list.add(m.group()); } } // *** 关闭资源.
bufIn.close(); // *** 返回集合.
return list; } // *** 基于 本地文件. // *** List 可以 存 重复的, Set 集合 不可以 存重复的.
public static List<String> getMails(File file, String regex) throws IOException { // *** 创建一个 集合 , 存取 爬 到的 邮箱 数据. List<String> list = new ArrayList<String>(); // 1. 读取文件. 加 高效, 一次 读 一行. BufferedReader bufr = new BufferedReader( new FileReader(file)); // 2. 将 正则 规则 编译成 对象. Pattern p = Pattern.compile(regex); String line = null; while((line = bufr.readLine())!=null) { Matcher m = p.matcher(line); // *** 文本 和 正则 对象 关联. while(m.find()) { // System.out.println(m.group()); // *** 先存起来 , 创建 一个 集合. list.add(m.group()); // *** 存到 集合中.
}
} // System.out.println(line); // *** 一定要 关闭 资源.
bufr.close(); // *** 返回 集合.
return list; }
} // *** 疯狂爬 网页的实现, 只要保证 一点, 网址(URL) 一直在 变化, 可以 爬 到 网页中的 超链接 时, 修改 网址 进到 超链接的 网址, 如此下去 ,便是 疯狂爬. 挂一天, 哈哈!!! // *** 等 学习了 Javamail 程序 , 自己写 一个 邮件 发送的 程序, 将 爬来的 邮箱 逐个 发广告.

  

  感谢 毕

Java 正则表达式_网络爬虫的更多相关文章

  1. Python 正则表达式 (python网络爬虫)

    昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...

  2. Apache Nutch v2.3 发布,Java实现的网络爬虫

    http://www.oschina.net/news/59287/apache-nutch-2-3 Apache Nutch v2.3已经发布了,建议所有使用2.X系列的用户和开发人员升级到这个版本 ...

  3. Java开发、网络爬虫、自然语言处理、数据挖掘简介

    一.java开发 (1) 应用开发,即Java SE开发,不属于java的优势所在,所以市场占有率很低,前途也不被看好. (2) web开发,即Java Web开发,主要是基于自有或第三方成熟框架的系 ...

  4. Java SE之网络爬虫①

    一 需求描述 给一个url,将该url对应网页内的所有的链接查找出来,并补充完整为绝对路径 简易版 /** * * @author Zen Johnny * @date 2018年4月29日 下午11 ...

  5. java 之webmagic 网络爬虫

    webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. http://webmagic.io/ 准备工作: Maven依赖(我这里用的Mav ...

  6. 黑马程序员:Java编程_网络编程

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 网络编程就是两个(或多个)设备(例如计算机)之间的数据传输,更具体的说,网络编程 ...

  7. Java丨jsoup网络爬虫模拟登录思路解析

    直奔主题: 本篇文章是给有jsoup抓包基础的人看的...... 今天小编给大家写一篇对于jsoup抓包时需要输入验证码的解决方法之一.大神就绕道,嘿嘿~ 任何抓包的基础都是基于Http协议来进行这个 ...

  8. 基于 Java 的开源网络爬虫框架 WebCollector

    原文:https://www.oschina.net/p/webcollector

  9. 学 Java 网络爬虫,需要哪些基础知识?

    说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...

随机推荐

  1. ELK-logstash基本用法

    一:logstash介绍 Logstash在elk系统中为数据存储,报表查询和日志解析创建了一个功能强大的管道链.Logstash提供了多种多样的 input,filters,codecs和outpu ...

  2. 【Feign】@FeignClient相同名字错误 The bean 'xxx.FeignClientSpecification', defined in null, could not be registered

    The bean 'xxx.FeignClientSpecification', defined in null, could not be registered. A bean with that ...

  3. 中文分词接口api,采用结巴分词PHP版中文分词接口

    中文分词,分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字.句和段能通过明显的分界符来简单划界,唯独词没有一个形式上 ...

  4. 【AHOI 2013】差异

    Problem Description 给定一个长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \(\sum_{1\leqslant i&l ...

  5. 6. abp中的拦截器

    abp拦截器基本定义 拦截器接口定义: public interface IAbpInterceptor { void Intercept(IAbpMethodInvocation invocatio ...

  6. OA表单制作(致远)

    第一步.导入已经制作好的xnl表单文件. 第二步.对每个字段设置相关属性. 1.设置文本属性,录入类型选择文本框. 2.设置日期属性,录入类型选择日期控件. 3.设置引用类型,录入类型选择关联表单-- ...

  7. Android 共享参数 SharedPreferences

    完成共享参数的读写 public class SharedPreference { private Context context; public SharedPreference(Context c ...

  8. threejs 限制物件只能在指定平面上拖拽

    threejs提供有 DragController.js的例子来辅助拖拽 该例子可以在基于当前屏幕的x和y轴上拖拽物体,但是它不能影响z轴. 查看代码,可以在touchStart\mousedown下 ...

  9. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  10. Spring基础——配置文件pom.xml,web.xml,ApplicationContext.xml

    Spring配置文件——复制粘贴即用 为了以后兼容SSM框架,直接创建Maven Project,包结构如下图. pom.xml <project xmlns="http://mave ...