当前位置: 首页 > news >正文

Java基础:爬虫

1.本地爬虫

Pattern:表示正则表达式

Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。

1.2.获取Pattern对象

通过Pattern p = Pattern.compile("正则表达式");获得

1.3.获取Matcher对象

通过Matcher m = p.matcher(str);获得  (m要在str中找符合p规则的小串)

其中, m为Matcher对象, p为正则表达式规则, str为要验证的字符串.

1.4.匹配文本中的对象

boolean b = m.find(); 表示拿着文本匹配器从头开始读取,寻找是否有满足规则的子串如果没有,方法返回false. 如果有,返回true。在底层记录子串的起始索引和结束索引+1.

1.5.截取文本匹配器的索引

String s = m.group(); 这时文本匹配器会停留在第一个匹配文本的结束索引+1处, 返回一个文本中索引为(0,4)不包含4索引的字符串(符合规则的). 

1.6.继续匹配和获取索引

重复第4步和第五步, 从上一次停留的地方开始向后查找.

第4步和第5步一般通过while(m.find()){}循环实现.

String s = "电话12345678901, 邮箱123@qq.com";// 写正则表达式String regex = "([1]\\d{10}|\\w{1,}@[\\w&&[^-]]{2,}([.][c][omn]{1,3})+)";// 生成正则对象Pattern pattern = Pattern.compile(regex);// 生成匹配器对象Matcher matcher = pattern.matcher(s);// 用循环去读取匹配的内容while (matcher.find()) {// 获取匹配的字符串String group = matcher.group();System.out.println(group);}

2.网络爬虫

 // 创建一个URL对象URL url = new URL("https://blog.csdn.net/Orange_sparkle?type=lately");// 连接网址URLConnection conn = url.openConnection();
//        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");// 创建对象读取数据BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//        conn.setRequestProperty("User-Agent", "Mozilla/4.76");String information;// 获取正则表达式对象pattern
//        String regex = "";
//        Pattern pattern = Pattern.compile(regex);// 在读取的时候每次读一行while ((information = bufferedReader.readLine()) != null) {System.out.println(information);
//            Matcher matcher = pattern.matcher(information);
//            while (matcher.find()){
//                System.out.println(matcher.group());
//            }}bufferedReader.close();

3.有条件的爬取数据

? 代表的是前面的数据, 后面的一个符号加正则表达式的意思是后面需要跟随的数据.

如果不看符号表示的就是需要匹配Java(8|11|17)这个字符串. 而其中的符号表示如下 : 

=表示只获取等号之前的数据, 忽略之后的.

: 表示冒号前后都获取

! 表示获取除了感叹号之后的数据

除了设置正则表达式不同, 之后的步骤都和之前一样

4.贪婪爬取和非贪婪爬取

贪婪爬取 : 在爬取数据的时候尽可能的多获取数据 (如:abbbbbbbbbbbb)

非贪婪爬取 : 在爬取数据的时候尽可能的少获取数据 (如:ab)

Java当中,默认的就是贪婪爬取

如果我们在数量词+*的后面加上问号,那么此时就是非贪婪爬取

5.正则表达式在字符串中的使用

 先创建一个正则表达式规则, 然后传入字符串方法中, 返回的就是新的替换后的字符串或切割后的字符串数组了.

6.分组

红色为第一组, 蓝色为第二组, 绿色为第三组

6.1.捕获分组

\\组号表示的就是把该组匹配的内容在匹配一遍, 两部分的内容相同.

在外部使用本组数据需要用到$组号.

6.2非捕获分组

特点:不占用组号

7.总结

http://www.lryc.cn/news/24077.html

相关文章:

  • 纯手动搭建大数据集群架构_记录008_搭建Hbase集群_配置集群高可用---大数据之Hadoop3.x工作笔记0169
  • Linux系统认知——驱动认知
  • Spring boot装载模板代码并自动运行
  • 全国领先——液力悬浮仿生型人工心脏上市后在同济医院成功植入
  • 基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
  • 云原生周刊:开源漏洞仍然是开发人员面临的挑战 | 2023.2.27
  • Docker学习总结
  • Android 9.0系统源码_通知服务(三)应用发送状态栏通知的流程
  • python中的序列——笔记
  • taobao.user.seller.get( 查询卖家用户信息 )
  • WebRTC Qos策略
  • Mysql数据查询
  • Kafka入门(五)
  • 如何快速在windows系统中切换node.js版本
  • 设计模式-单例模式(java)
  • Revit中复合墙图层的规则和CAD识别翻模墙
  • 【DL】Paddle BML Codelab环境使用说明 - 知识点目录
  • python正则表达式处理文本-re模块
  • 换了固态硬盘需要重装系统吗?教你如何实现不重装系统!
  • 网上医疗预约挂号系统
  • 专题:一看就会的C++类模板讲解 (1)
  • 什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化
  • 角谷定理(递归)
  • 数学小课堂:微积分复盘(高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。)
  • JAVA线程池原理详解一
  • Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送
  • LSB 题解
  • 离线部署docker与镜像
  • Linux文件系统介绍(上)
  • 创建SpringBoot注意事项