爬虫的学习
本地爬虫
public static void main(String[] args) { //正则表达式对象 Pattern //文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取 // 在大串中找符合规则的字串 Matcher String str = "Java语言是Sun公司于1990年开发的;1994年,Gosling用Java7语言开发了一个实用性较高、可靠、安全、有交互功能的新型Web浏览" "器,它不依赖与任何硬件平台和软件平台,该浏览器被命名为HotJava,并于1995年在业界发表,引起了巨大的轰动,Java61语言的地位随之得到了肯定;1995年5月23日,JDK(Java8 Developmenr Kit)1.0a2版本正是对外发布;2009年4月20日,Sun公司被Oracle公司收购。"; //获取正则表达式的对象 Pattern p = Pattern.compile("Java\d{0,2}"); //获取文本匹配器的对象 //m:文本匹配器对象 //p:规则 //str 大串 //m需要在str中寻找符合p的小串 Matcher m = p.matcher(str); //运用循环 while (m.find()){ String s = m.group(); System.out.println(s); } /* //拿着文本匹配器从头开始读取,寻找是否又满足的字串 //没有返回false //有返回true,在底层记录子串的起始索引 和 结束索引+1 boolean b = m.find(); //方法底层会根据find方法记录的索引进行字符串的截取 //subString(起始索引,结束索引);包头不包尾。 String s1 = m.group(); System.out.println(s1); //第二次调用find的时候,会继续读取后面的内容 //读取刀第二个满足的字串,会返回true //并把第二个字串的起始索引和结束索引+1记录 b = m.find(); String s2 = m.group(); System.out.println(s2); */ }
带条件的爬取
public static void main(String[] args) { String str = "Java语言是Sun公司于1990年开发的;1994年,Gosling用JaVa8语言开发了一个实用性较高、可靠、安全、有交互功能的新型Web浏览" + "器,它不依赖与任何硬件平台和软件平台,该浏览器被命名为HotJava,并于1995年在业界发表,引起了巨大的轰动,JAVa11语言的地位随之得" + "到了肯定;1995年5月23日,JDK(JAVA17 Developmenr Kit)1.0a2版本正是对外发布;2009年4月20日,Sun公司被Oracle公司收购。"; //爬取不区分大小写的并且带版本号的Java,但是只返回前半部分 String regex1="((?i)Java)(?=8|11|17)"; //爬取不区分大小写的并且带版本号的Java,全部返回 String regex2="((?i)Java)(?:8|11|17)"; //爬取不区分大小写的并且不带版本号的 String regex3="((?i)Java)(?!8|11|17)"; Pattern pattern = Pattern.compile(regex3); Matcher matcher = pattern.matcher(str); while (matcher.find()){ System.out.println(matcher.group()); }
贪婪爬取:在爬取数据的时候,尽可能的多获取数据
非贪婪爬取:在爬取数据的时候,尽可能的少获取数据
Java当中默认贪婪爬取,如果我们在数量词+ *的后面加上问号,那么此时就是非贪婪爬取。
String s="abbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaa"; String regex1="ab+";//贪婪爬取:abbbbbbbbbbbbbbbbbb String regex2="ab+?";//非贪婪爬取:ab Pattern p = Pattern.compile(regex1); Matcher m = p.matcher(s); while (m.find()){ System.out.println(m.group());
正则表达式在字符串方法中的使用
public String replaceAll(String regex,String newStr) 按照正则表达式的规则进行替换
public String[] split(String regex) 按照正则表达式的规则切割字符串
public static void main(String[] args) { String s="弱智asdasndjiashdkjas1111123bndiu脑瘫asdasndjia1241245shdkjasbndiu低能"; //细节: //方法在底层也会创建文本解析器的对象 //然后从头开始去读取字符串中的内容,只要有满足的就用第二个参数去替换 String result = s.replaceAll("[\w&&[^_]]+", "vs"); System.out.println(result); String[] split = s.split("[\w&&[^_]]+"); for (int i = 0; i < split.length; i++) { System.out.println(split[i]); }