Java 正则表达式_网络爬虫
首先 需要了解 一些 关于 网络爬虫的 基本知识:
网络爬虫: 所谓的 爬虫 就是一个 应用 程序, 这个 应用 程序 会 获取 网络中的 指定信息(网页 数据).
例如百度: 启动 这个 爬虫 程序 会 自动 的 将 一些 网页 数据 获取 来 存到 百度的服务器上 提高了 搜索 效率.
我们搜索的 时候 , 其实 搜索的 不是 网络中的 内容, 而是 百度中的 内容, 而 百度就将 所有的 互联网中的 数据 爬到 它 的服务器上边 供人们 搜索.
我们 也可以 写一个 程序 去获取 网络中的 指定 资源.
例如: 获取 网络中的 邮箱(邮件地址), 用来 发广告.
网络 爬虫: 其实是一个 应用程序, 获取 网络中的 指定信息(符合 指定 规则的信息). 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 正则表达式_网络爬虫的更多相关文章
- Python 正则表达式 (python网络爬虫)
昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...
- Apache Nutch v2.3 发布,Java实现的网络爬虫
http://www.oschina.net/news/59287/apache-nutch-2-3 Apache Nutch v2.3已经发布了,建议所有使用2.X系列的用户和开发人员升级到这个版本 ...
- Java开发、网络爬虫、自然语言处理、数据挖掘简介
一.java开发 (1) 应用开发,即Java SE开发,不属于java的优势所在,所以市场占有率很低,前途也不被看好. (2) web开发,即Java Web开发,主要是基于自有或第三方成熟框架的系 ...
- Java SE之网络爬虫①
一 需求描述 给一个url,将该url对应网页内的所有的链接查找出来,并补充完整为绝对路径 简易版 /** * * @author Zen Johnny * @date 2018年4月29日 下午11 ...
- java 之webmagic 网络爬虫
webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. http://webmagic.io/ 准备工作: Maven依赖(我这里用的Mav ...
- 黑马程序员:Java编程_网络编程
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 网络编程就是两个(或多个)设备(例如计算机)之间的数据传输,更具体的说,网络编程 ...
- Java丨jsoup网络爬虫模拟登录思路解析
直奔主题: 本篇文章是给有jsoup抓包基础的人看的...... 今天小编给大家写一篇对于jsoup抓包时需要输入验证码的解决方法之一.大神就绕道,嘿嘿~ 任何抓包的基础都是基于Http协议来进行这个 ...
- 基于 Java 的开源网络爬虫框架 WebCollector
原文:https://www.oschina.net/p/webcollector
- 学 Java 网络爬虫,需要哪些基础知识?
说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...
随机推荐
- 你不知道的JavaScript(上)this和对象原型(四)原型
五章 原型 1.[[ Prototype ]] JavaScript 中的对象有一个特殊的 [[Prototype]] 内置属性,其实就是对于其他对象的引用.几乎所有的对象在创建时 [[Prototy ...
- [ASP.NET Core 3框架揭秘] 依赖注入[2]:IoC模式
正如我们在<依赖注入:控制反转>提到过的,很多人将IoC理解为一种"面向对象的设计模式",实际上IoC不仅与面向对象没有必然的联系,它自身甚至算不上是一种设计模式.一般 ...
- 爬虫(七):BeatifulSoup模块
1. Beautiful Soup介绍 Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.能将即将要进行解析的源码加载到bs对象,调用bs对象中相关的方法或属性进 ...
- Java面试题_第一阶段(static、final、面向对象、多线程、集合、String、同步、接口、GC、JVM)
1.1 简述static和final的用法? static:修饰属性,方法,代码块 (1)静态属性:也可叫类变量 类名.属性名 来访问 (共有的类变量与对象无关,只和类有关) 注意:类中的实例变量 ...
- Hadoop_简介_01
1. Apache Hadoop 1.1 Hadoop介绍 Hadoop是Apache旗下的一个用java语言实现的开源软件框架, 是一个开发和运行处理大规模数据的软件平台. 允许使用简单的编程模型在 ...
- linux 动态链接库查找方法;查找动态链接库位置; LIBRARY_PATH 和 LD_LIBRARY_PATH 的区别;LD_LIBRARY_PATH and LD_RUN_PATH的区别;
今天配置之前项目的时候,发现有些动态链接库变了,想看看现在应用在使用哪些动态链接库的时候,进一步查了点资料: 下面针对linux动态链接库查找方法和动态链接库位置配置的过程进行记录: LIBRARY_ ...
- 【原创】你的Redis怎么持久化的
引言 (本文改编自生活真实案例,如有类同,绝不是巧合!) 端午节,烟哥正在一边愉快的学习.... 突然,微信一阵抖动.原来是老刘呼唤烟哥!善良的烟哥本以为人家是要约我出去玩!然而,打开微信一看,出现下 ...
- 【编码】彻底弄懂ASCII、Unicode、UTF-8之间的关系
计算机中的所有字符,说到底都是用二进制的0.1的排列组合来表示的,因此就需要有一个规范,来枚举规定每个字符对应哪个0.1的排列组合,这样的规范就是字符集. ASCII 全称是“美国信息交换标准码”(A ...
- Jmeter脚本参数化和正则匹配
我们在做接口测试过程中,往往会遇到以下几种情况 每次发送请求,都需要更改参数值为未使用的参数值,比如手机号注册.动态时间等 上一个接口的请求体参数用于下一个接口的请求体参数 上一个接口的响应体参数用于 ...
- DataGridView使用BindingNavigator实现简单分页功能
接上一篇<DataGridView使用自定义控件实现简单分页功能>,本篇使用BindingNavigator来实现简单分页功能.其实也只是借用了一个BindingNavigator空壳, ...