JavaSE 利用正则表达式进行本地和网络爬取数据(爬虫)
爬虫
正则表达式的作用
作用1:校验字符串是满足规则
作用2:在一段文本中查找满足需要的内容
本地爬虫和网络爬虫
Pattern类 表示正则表达式
Matter类 文本编译器,作用按照正则表达式的规则去读取字符串,从头开始读取,在大串中去找符合匹配规则的子串
方法底层会根据find方法记录的索引进行字符串的截取
subString(起始索引,结束索引)
包头不包尾
爬取第一个
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str="Java自从问世以来,经历了很多版本,目前企业中" + "用的最多的是Java8和Java11,因为这两个是长期支" + "持的版本,下一个长期支持的版本是Java17,相信在" + "未来不久Java17也会逐渐登上历史舞台"; //创建Partton类 表示正则表达式 //Matter类 文本编译器,作用按照正则表达式的规则去读取字符串 //从头开始读取,在大串中去找符合匹配规则的子串 Pattern p=Pattern.compile("Java\\d{0,2}"); Matcher m= p.matcher(str); m.find(); //拿着文本匹配器从头开始读取,查找是否有满足规则的子串 //返回值true false //还会记录子串的起始索引 结束索引+1 //方法底层会根据find方法记录的索引进行字符串的截取 //subString(起始索引,结束索引) //包头不包尾 String s=m.group(); System.out.println(s); } }
依次爬取
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str="Java自从问世以来,经历了很多版本,目前企业中" + "用的最多的是Java8和Java11,因为这两个是长期支" + "持的版本,下一个长期支持的版本是Java17,相信在" + "未来不久Java17也会逐渐登上历史舞台"; //method(str); //获得正则表达式的对象 Pattern p=Pattern.compile("Java\\d{0,2}"); //获得文本匹配器的对象 //拿着m去读取str 找符合p规则的子串 Matcher m= p.matcher(str); //用循环爬取 while(m.find()){ String s=m.group(); System.out.println(s); } } private static void method(String str) { //创建Partton类 表示正则表达式 //Matter类 文本编译器,作用按照正则表达式的规则去读取字符串 //从头开始读取,在大串中去找符合匹配规则的子串 Pattern p=Pattern.compile("Java\\d{0,2}"); Matcher m= p.matcher(str); m.find(); //拿着文本匹配器从头开始读取,查找是否有满足规则的子串 //返回true false //还会记录子串的起始索引 结束索引+1 //方法底层会根据find方法记录的索引进行字符串的截取 //subString(起始索引,结束索引) //包头不包尾 String s=m.group(); System.out.println(s); } }
爬取网站中的内容
有条件的爬取数据
定义正则表达式
String regex ="Java(?=8|11|17)"
?表示前面的数据Java (替代的占位符)
=表示在Java后面要跟随的数据
这样写的意思是,在获取的时候,只获取前半部分
先获取到正则表达式的对象
再传递给文本解析器对象
Pattern p = Pattern.compile(regex); Matcher m=p.matcher(str);
最后用文本解析器调用方法
while(m.find){ m.group(); }
find()
如果找到了
方法返回值为true
并且把字符串始末索引加一后进行记录
group()
会按照find记录的索引去记录字符串
((?i)Java)表示不计Java的大小写
需求1
需求2
需求3
!表示非
贪婪爬取和非贪婪爬取
贪婪爬取:在爬取数据的时候尽可能多获取数据
非贪婪爬取:在爬取数据的时候尽可能少获取数据
正则表达式在字符串方法中的使用
练习
快捷键ctr l + p查看方法参数
[\ \w && [ ^ _ ]]+
在前面的范围中去掉下划线_ 得到数字和字母至少出现一次
replaceAll()方法
this表示当前方法调用者的地址值
方法在底层跟之前一样也会创建文本解析器的对象
然后从头开始去读取字符串中的内容,只要有满足的
那么就用第二个参数去替换
split()方法
按照正则表达式下刀切割 在放入字符串数组 返回
在API文档中查找
个人号推广
博客主页
多多!-CSDN博客
Web后端开发
https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482
Web前端开发
https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482
数据库开发
https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482
项目实战
https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482
算法与数据结构
https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482
计算机基础
https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482
回忆录
https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482