当前位置: 首页 > news >正文

Java爬虫与正则表达式——用正则来爬取数据

API

Java帮我们写好的各种功能的Java类。这些Java类统称为API。正则表达式就是API帮我们写好的类。

正则表达式

例子: 

字符类:[abc]:只能是a,b或c

              [^abc]:除了a,b,c之外的任何字符

              [a-zA-Z]:满足a-z以及A-Z这两个区间中的任意一个都可以

              [a-d[m-p]]:a到d或者m到p

              [a-z&&[def]]:a到z和def的交集。

              [a-z&&[^bc]]:a到z和非bc的交集

              [a-z&&[^m-p]]:a到z和非m到p的交集

预定义字符(只能匹配一个字符):.     任何的一个字符

                                                        \d   一个数字:[0-9]

                                                        \D   非数字:[^0-9]

                                                        \s    一个空白字符:[\t\n\x0B\f\r]

                                                        \S   非空白字符:[^\s]

                                                        \w   [a-zA-Z_0-9]英文、数字、下划线

                                                        \W   [^\w]一个非单词字符

                                                        (?i)   忽略大小写

注意:\是转义字符,所以在java中,两个\(\\)表示一个\。(借鉴如上的例子)

数量词:X?     X,一次或0次

              X*      X,零次或多次

              X+      X,一次或多次

              X{n}    X,正好n次

              X{n,}   X,至少n次

              X{n,m}  X,至少n次但不超过m次

爬虫

本地爬虫

网络爬虫

URL后面的网址,是你想要爬取的网址。 

有条件的爬取

贪婪爬取与非贪婪爬取

如果我们在用数量词获取数据时,它表示的次数不精确,那么我们到底获取的是多少次呢?这就涉及到了贪婪爬取与非贪婪爬取。

贪婪爬取:在爬取数据时尽可能多的获取数据。(java默认)

非贪婪爬取:在爬取数据时尽可能少的获取数据。

Java中,默认的是贪婪爬取;如果我们在数量词+ *的后面加上问号,那么此时就是非贪婪爬取

正则表达式在字符串方法中的使用

这里说几个常用的,因为有很多,大家可以在API文档中查阅。

public String[] matches(String regex):判断字符串是否满足正则表达式的规则

public String replaceAll(String regex,String newStr):按照正则表达式的规则进行替换。

public String[] split(String regex):按照正则表达式的规则切割字符串。

分组 

每组是有组号的,也就是序号。

规则1:从1开始,连续不间断。

规则2:以左括号为基准,最左边的是第一组,其次为第二组,以此类推。

 捕获分组

正则内部使用:\\组号

正则外部使用:$组号

非捕获分组

(?:正则):获取所有

(?=正则):获取前面部分

(?!正则):获取不是指定内容的前面部分

注意:这里的括号不占用分组。

如果String regex = "[1-9](?:\\d)\\1";这里后面的\\1会报错,因为他不知道哪里是第一组,这个表达式没有分组。

http://www.dtcms.com/a/284239.html

相关文章:

  • 二刷 黑马点评 秒杀优化
  • 板凳-------Mysql cookbook学习 (十二--------1)
  • 医院各类不良事件上报,PHP+vscode+vue2+element+laravel8+mysql5.7不良事件管理系统源代码,成品源码,不良事件管理系统
  • React事件处理
  • 【FFmpeg 快速入门】本地播放器 项目
  • c++:explicit关键字
  • Python枚举技巧:轻松获取索引与值
  • 【Linux手册】缓冲区:深入浅出,从核心概念到实现逻辑
  • Python爬虫入门到实战(2)-selenium驱动浏览器
  • 8.预处理-demo
  • 建筑兔零基础人工智能自学记录111|初识comfyui-20
  • PyTorch笔记8----------卷积神经网络
  • 使用Pytorch进行数字手写体识别
  • 对比分析:给数据找个 “参照物”,让孤立数字变 “决策依据”
  • notepad++ 多行复制拼接
  • 原生前端JavaScript/CSS与现代框架(Vue、React)的联系与区别(详细版)
  • Git 子模块只更新部分模块的问题排查总结
  • Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】
  • GitHub Jekyll博客本地Win开发环境搭建
  • 【URL 转换为PDF】HTML转换为PDF
  • 【哈希映射实现的并集查找】P5962 [BalticOI 2004] ships 船|普及+
  • 【析精】Landmark-Guided Subgoal Generation in Hierarchical Reinforcement Learning
  • 【加解密与C】Base系列(六)Base100
  • 基于在线地图的路径规划测评对比-综合对比城区、农村及城乡结合处的导航
  • JavaScript进阶篇——第八章 原型链、深浅拷贝与原型继承全解析
  • 20250717 Ubuntu 挂载远程 Windows 服务器上的硬盘
  • Linux C 进程基本操作
  • 冒泡排序、选择排序、插入排序、快速排序
  • NLP——迁移学习
  • 【unity组件介绍】URP Decal Projector贴花投影器,将特定材质(贴花)投影到场景中的其他对象上。