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, 邮箱[email protected]";
        // 写正则表达式
        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.总结

猜你喜欢

转载自blog.csdn.net/Orange_sparkle/article/details/129263808