java基础-爬虫

本地爬虫:

找到这句话里面的JavaXX 

Java自1995年问世以来,经历了很多版本,目前企业中普遍使用的是Java8和Java11。因为这两个是长期支持版本," +
        "下一个长期支持版本是Java17,相信在未来不久Java17也会慢慢退出历史的舞台

package com.jdL.day19classwork;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class crawlerTest {
    public static void main(String[] args) {
        String str="Java自1995年问世以来,经历了很多版本,目前企业中普遍使用的是Java8和Java11。因为这两个是长期支持版本," +
                "下一个长期支持版本是Java17,相信在未来不久Java17也会慢慢退出历史的舞台;";
        //要求:爬虫找出所有的Javaxx
//        Pattern p=Pattern.compile("Java\\d{0,2}");
//        //获取文本匹配器对象
//        //m:文本匹配器的对象
//        //str:大串
//        //p:规则
//        //m要在str中找符合p规则的小串
//        //如果有返回true,在底层记录子串的起始索引和结束索引+1
//        Matcher m=p.matcher(str);
//        //拿着文本匹配器从头开始读取
//        //方法的底层会根据find方法记录的索引进行字符串的截取
//        boolean r=m.find();
//        String s1=m.group();
//        System.out.println(s1);
//
//        r=m.find();
//        String s2=m.group();
//        System.out.println(s2);

        //写一个方法
        //1、获取正则表达式的对象
        Pattern p=Pattern.compile("Java\\d{0,2}");
        //2、获取一个文本匹配器
        //可以理解为用文本匹配器m去str里面找p规则的字串
        Matcher m=p.matcher(str);
        //m.find表示找到了目标字符串,并且记录目标串的索引
        while(m.find()){
            String a=m.group();//每一次获取到的字串
            System.out.println(a);
        }
    }
}

网络爬虫:(这里还没有调整好)

package com.jdL.day19classwork;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class crawlerTest1 {
    public static void main(String[] args) throws IOException {
        //爬取相关网络上文本
        //创建一个URL对象
        URL url=new URL("https://dushu.baidu.com/pc/reader?gid=4315647122&cid=10225072");
        //连接这个网络
        URLConnection conn=url.openConnection();
        //创建一个对象读取网络中的数据
        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line=null;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
        br.close();
    }
}

String regelx = "(1[3-9]\\d{9})|(\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2})" +
        "|(0\\d{2,3}-?[1-9]\\d{4,9})|(400-?[1-9]\\d{2}-?[1-9]\\d{3})";

Pattern p1 = Pattern.compile(regelx);
Matcher m = p1.matcher(s);
while (m.find()) {
    String result = m.group();
    System.out.println(result);

练习:

String str="Java自1995年问世以来,经历了很多版本,目前企业中普遍使用的是Java8和Java11。因为这两个是长期支持版本," +
        "下一个长期支持版本是Java17,相信在未来不久Java17也会慢慢退出历史的舞台;";
//需求1:爬取版本号为8,11,17的Java版本,但是只要Java,不要版本号
//需求2:爬取版本号为8,11,17的Java版本,需要版本号,正确的格式为Java11,Java17
//需求3:爬取除了版本8.11.17的Java版本

需求1:(正前瞻语言)

String regex="Java(?=[1-9][1-9]?)";
Pattern p = Pattern.compile(regex);
Matcher m =p.matcher(str);
while(m.find()){
    String result = m.group();
    System.out.println(result);

需求2:

String regex="Java[1-9][1-9]?";
Pattern p = Pattern.compile(regex);
Matcher m =p.matcher(str);
while(m.find()){
    String result = m.group();
    System.out.println(result);
}

需求3(负前瞻语言)

String regex="Java(?![1-9][1-9]?)";
Pattern p = Pattern.compile(regex);
Matcher m =p.matcher(str);
while(m.find()){
    String result = m.group();
    System.out.println(result);
}

贪婪爬取:

贪婪:
String regex="ab+";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find()){
    String result=m.group();
    System.out.println(result);
}

非贪婪:

String regex="ab+?";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find()){
    String result=m.group();
    System.out.println(result);
}

String str="小诗诗dahdhude1234小丹丹dhuekiuueqydie789小慧慧";
//需求1:把三个名字之间的字符和数字改为vs
//需求2:把三个名字切割出来
需求1:
String regex="\\w+";
//Pattern p=Pattern.compile(regex);
str=str.replaceAll(regex,"vs");
System.out.println(str);

需求2:

String regex="\\w+";
//Pattern p=Pattern.compile(regex);
String[] arr=str.split(regex);
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

分组:

1、

String regex="(.).+\\1";
System.out.println("a112a".matches(regex));
System.out.println("b$$$b".matches(regex));
System.out.println("c1010c".matches(regex));

2、

String regex1="(.+).+\\1";
System.out.println("abc112abc".matches(regex1));
System.out.println("bc$$$bc".matches(regex1));
System.out.println("cc1010cc".matches(regex1));

3、

String regex2="((.)\\2*).+\\1";
System.out.println("abc112abc".matches(regex2));
System.out.println("aab$$$aab".matches(regex2));
System.out.println("ccc1010ccc".matches(regex2));
我要学学编编编编编编编程程程程程程程程程

把上面的字符串替换去重

String str="我要学学编编编编编编编程程程程程程程程程";
//(.)重复内容的第一个字符当作第一个组
//\\1表示第一个字符再次出现
//+至少一次
//$1把正则表达式第一组再次拿出来用
String result=str.replaceAll("(.)\\1+","$1");
System.out.println(result);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值