对于爬虫的学习

news/2024/7/19 11:53:33 标签: 爬虫, 学习, python

本地爬取

package MyApi.a08regexdemo;

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

public class RegexDemo03 {
    public static void main(String[] args) {
       //要求:找出里面所有javaxx
        String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
                "相信在不久的未来Java17也会逐渐登上历史舞台";
     //   method1(str);
        //1.获取正则表达式的对象
        Pattern pattern = Pattern.compile("Java\\d{0,2}");
        //2.获取文本匹配器的对象
        Matcher m  = pattern.matcher(str);
        //3.利用循环获取
        while(m.find()){
            String s=m.group();
            System.out.println(s);
        }
    }

    private static void method1(String str) {
        //获取正则表达式的对象
        Pattern pattern = Pattern.compile("Java\\d{0,2}");
        //获取文本匹配器的对象
        Matcher m  = pattern.matcher(str);
        //拿着文本匹配器从头开始读取,寻找是否有满足规则的字串
        //如果没有,方法返回false
        //如果有,返回true,在底层记录字串的起始索引和结束索引+1
        boolean b = m.find();
        //方法底层会根据find方法记录的索引进行字符串的截取
        //subString(起始索引,结束索引):包头不包尾
        //会把截取的小串进行返回
        String s1=    m.group();
        System.out.println(s1);
        //第二次调用find的时候,会继续读取后面的内容
        //读取到第二个满足要求的字串,方法会继续返回true
        //并把第二个字串的起始索引和结束索引+1,进行记录
        boolean b1 = m.find();
        String s2=m.group();
        System.out.println(s2);
    }
}

网络爬取

package MyApi.a08regexdemo;

import javax.print.DocFlavor;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo04 {
    public static void main(String[] args) {
        /*需求:
        把连接:http://m.sengzan.com/jiaoyu/29104.html?ivk_sa=105883i
        中的所有身份证号码都爬取出来
        * */
        //创建一个url对象
        URL url=new URL("http://m.sengzan.com/jiaoyu/29104.html?ivk_sa=105883i");
    //连接上这个网址
        URLConnection conn=url.openConnection();
        //创建一个对象去读取网络中的数据
        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())) ;
        String line;
        //获取正则表达式对象
        String regex="[1-9]\\d{17}";
        Pattern pattern=Pattern.compile(regex);
        while((line=br.readLine())!=null){
            Matcher matcher=pattern.matcher(line);
            while(matcher.find()){
                System.out.println(matcher.group());
            }
        }
        br.close();
    }
}
package MyApi.a08regexdemo;

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

public class Regexdemoo5 {
    public static void main(String[] args) {
        /*
        * 需求:把下面的文本中的座机号码,邮箱,手机号,热线都爬取出来
        * 来黑马程序员学习Java
        * 手机号: 18512516758,18512508907
        * 或者联系邮箱:boniu@itcast.cn,
        * 座机电话:01036517895,010-9895256
        * 邮箱:boniu@itcast.cn,
        * 热线电话:400-618-9090,400-618-4000,4006184000,4006189090 */
   String s="来黑马程序员学习Java" +
           "手机号: 18512516758,18512508907" +
           "或者联系邮箱:boniu@itcast.cn," +
           "座机电话:01036517895,010-9895256" +
           "邮箱:boniu@itcast.cn," +
           "热线电话:400-618-9090,400-618-4000,4006184000,4006189090";
   String regex1="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 pattern=Pattern.compile("regex1");
        Matcher m = pattern.matcher(s);
        while(m.find()){
        String str=    m.group();
            System.out.println(str);
        }

    }
}

package MyApi.a08regexdemo;

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

public class Regexdemo06 {
    public static void main(String[] args) {
        String str="java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
                "相信在不久的未来Java17也会逐渐登上历史舞台";
     //需求1
        String regex1="((?i)Java)(?=8|11|17)";
//需求2
        String regex2="((?i)Java)(8|11|17)";
        String regex3="((?i)Java)(?:8|11|17)";
        //需求3
        String regex4="((?i)Java)(?!8|11|17)";
        Pattern pattern=Pattern.compile(regex4);
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()){
            String s=matcher.group();
            System.out.println(s);
        }

    }
}

贪婪爬取和非贪婪爬取

package MyApi.a08regexdemo;

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

public class Regexdemo07 {
    public static void main(String[] args) {
        String str="Java自从95年问世以来abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
                "相信在不久的未来Java17也会逐渐登上历史舞台";
       /*
       * 贪婪爬取:在爬取数据的时候尽可能的多获取数据
       * 非贪婪爬取:在爬取数据的时候尽可能的少获取数据
       * java当中默认是贪婪爬取
       * 如果我们在数量词+ * 的后面加上问号,那么此时就是非贪婪爬取*/
        //需求1
        String regex="ab+";
        //需求2
        String regex1="ab+?";
        Pattern pattern=Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()){
            System.out.println(matcher.group());
        }

    }
}


http://www.niftyadmin.cn/n/5402819.html

相关文章

钉钉机器人发送折线图卡片 工具类代码

钉钉机器人 “创建并投放卡片 接口 ” 可以 发送折线图、柱状图 官方文档:创建并投放卡片 - 钉钉开放平台 0依赖、1模板、2机器人放到内部应用、3放开这个权限 、4工具类、5调用工具类 拼接入参 卡片模板 自己看文档创建,卡片模板的id 有用 0、依赖…

STL-容器适配器详解

C STL容器适配器详解 容器适配器,其就是将不适用的序列式容器(包括 vector、deque 和 list)变得适用。容器适配器的底层实现和模板 A、B 的关系是完全相同的,即通过封装某个序列式容器,并重新组合该容器中包含的成员函…

分布式存储Ceph应用

Ceph应用一、创建 CephFS 文件系统 MDS 接口1、服务端操作2、客户端操作 二、创建 Ceph 块存储系统 RBD 接口1、创建存储池2、将存储池转换为 RBD 模式3、初始化存储池4、创建镜像5、镜像管理5.1 查看镜像5.2 修改镜像大小5.3 删除和还原镜像 6、Linux客户端使用7、快照管理 三…

Linux内核队列queue.h

文章目录 一、简介二、SLIST单向无尾链表2.1 介绍2.2 操作2.3 例子 三、STAILQ单向有尾链表四、LIST双向无尾链表五、TAILQ双向有尾链表六、CIRCLEQ循环链表七、queue源码参考 一、简介 queue.h是一个非常经典的文件,定义了一系列宏的操作,它定义了一系…

GEMM优化(RISC-V平台)

文章目录 预备知识准备工作测试交叉编译内存带宽测试roofline模型 sgemm优化使用说明Version 0: naive版本Version 1: 循环交换版本Version 2: 分块版本Version 3: 分块优化版本Version 4: B prepack版本Version 5: A pack & B prepack版本Version 6: 汇编版本Version 7: 汇…

【k8s配置与存储--配置管理】

1、ConfigMap的配置 1.1 ConfigMap介绍 ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。 ConfigMap 将你的环境配置信息和容器镜像解耦,便于应用配…

Golang 实现 websocket 通讯(一个服务器,两个客户端)

运行客户端时首先要输入自己的名字,两个客户端输入的名字不能一样。 先上运行结果: 服务器端: 客户端1: 客户端2: 话不多说,直接上代码: 服务器端: package mainimport ("f…

唐海静将出席优化产品结构实现糖的原料效益最大化

演讲嘉宾:唐海静 总工 欧尚元智能装备有限公司 演讲题目:优化产品结构实现糖的原料效益最大化 会议简介 “十四五”规划中提出,提高工业、能源领城智能化与信息化融合,明确“低碳经济”新的战略目标,热能产业是能源…