爬虫的学习

本地爬虫

 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]);
    }

你可能感兴趣的:(爬虫,学习)