python-网络爬虫.regular
regular
正则表达式 (regular expression)
正则表达式(regular expression)描述了一种字符串匹配的模式 (pattern),
可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串 中取出符合某个条件的子串等。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字 符") 组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正 则 表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
网上有的网上找
网上无的自己写
电话号码匹配
邮箱地址匹配
身份证号匹配
指定字符匹配
\d 匹配数字 \D 匹配非数字
\w 匹配字符 \W 匹配非字符
\s 匹配空白 \S 匹配非空白
\b 匹配边界
百度搜索: 史上最全正则表达式
(一) 常用正则
1、字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
2、字符
3、量词
(二)正则表达式的使用
.+ 是贪婪的 - 它匹配,直到它不再匹配,只返回所需的数量.
.+? 不是贪婪的,它在第一次机会匹配即停止.
例子:
(二)常用方法
re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是 基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配, 提取自己需要的字符串部分,他对所有的语言都通用。注意:
• re模块是python独有的
• 正则表达式所有编程语言都可以使用
• re模块、正则表达式是对字符串进行操作
因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式。
第一步: import re
第二步: pat= re.compile(r'◎片名:(.*)\n') #r内的字符串就是正则表达 式的规则字符串
第三步: ret =re.findall(pat,html) #开始在目标html字符串中按照正则表 达式来依次匹配
第四步: print(ret) #将匹配成功的信息打印输出
1、re.compile(pattern,flags = 0 ) 将正则表达式模式编译为正则表达式对象,可使用match(),search()以及 下面所述的其他方法将其用于匹配
>>> prog = re.compile('\d{2}') # 正则对象
>>> prog.search('12abc')
>>> prog.search('12abc').group()
# 通过调用group()方法得到匹配的字符 串,如果字符串没有匹配,则返回None。
'12'
>>> prog.match('123abc')
>>> prog.match('123abc').group() '12'
>>>
2、re.search(pattern,string,flags = 0 )
扫描字符串以查找正则表达式模式产生匹配项的第一个位置 , 然后返回相应的match对象。None如果字符串中没有位置与模式匹配,则 返回;
否则返回false。请注意,这与在字符串中的某个点找到零长度匹配不同。
#在这个字符串进行匹配,只会匹配一个对象
>>> re.search('\w+','abcde').group()
'abcde'
>>> re.search('a','abcde').group()
'a'
>>>
3、re.match(pattern,string,flags = 0 )
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的 匹配对象。
None如果字符串与模式不匹配,则返回;否则返回false。
请注 意,这与零长度匹配不同。
# 同search,不过在字符串开始处进行匹配,只会匹配一个对象
>>> re.match('a','abcade').group()
'a'
>>> re.match('\w+','abc123de').group()
'abc123de'
>>> re.match('\D+','abc123de').group() #非数字
'abc'
>>>
4、re.fullmatch(pattern,string,flags = 0 )
如果整个字符串与正则表达式模式匹配,则返回相应的match对象。None
如果字符串与模式不匹配,则返回;否则返回false。请注意,这与零长度 匹配不同。
>>> re.fullmatch('\w+','abcade').group()
'abcade'
>>> re.fullmatch('abcade','abcade').group()
'abcade'
>>>
5、re.split(pattern,string,maxsplit = 0,flags = 0 )
通过出现模式来拆分字符串。如果在pattern中使用了捕获括号,那么 模式中所有组的文本也将作为结果列表的一部分返回。如果maxsplit不为 零,则最多会发生maxsplit分割,并将字符串的其余部分作为列表的最后一 个元素返回。
>>> re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别 按'b'分割
['', '', 'cd']
>>> re.split(r'\W+', 'Words, words, words.')
['Words', 'words', 'words', ''] >>> re.split(r'(\W+)', 'Words, words, words.') ['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split(r'\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
如果分隔符中有捕获组,并且该匹配组在字符串的开头匹配,则结果将从 空字符串开始。字符串的末尾也是如此:
>>> re.split(r'(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
6、re.findall(pattern,string,flags = 0 )
以string列表形式返回string中pattern的所有非重叠匹配项。从左到右 扫描该字符串,并以找到的顺序返回匹配项。如果该模式中存在一个或多 个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组, 则这将是一个元组列表。空匹配项包含在结果中。
>>> re.findall('a', 'This is a beautiful place!')
['a', 'a', 'a']
>>>
7、re.finditer(pattern,string,flags = 0 )
返回一个迭代器,该迭代器在string类型的RE 模式的所有非重叠匹配中产 生匹配对象。 从左到右扫描该字符串,并以找到的顺序返回匹配项。空匹 配项包含在结果中。
>>> re.finditer('[ab]', 'This is a beautiful place!')
>>> ret=re.finditer('[ab]', 'This is a beautiful place!')
>>> next(ret).group() #查看下一个匹配值
'a'
>>> [i.group() for i in ret] #查看剩下所有匹配的值
['b', 'a', 'a']
>>>
8、re.sub(pattern,repl,string,count = 0,flags = 0 )
返回通过用替换repl替换字符串中最左边的不重叠模式所获得的字符 串。如果找不到该模式, 则返回的字符串不变。 repl可以是字符串或函 数;如果是字符串,则处理其中的任何反斜杠转义。即,将其转换为单个 换行符,将其转换为回车,依此类推。count参数表示将匹配到的内容进行 替换的次数
>>> re.sub('\d', 'S', 'abc12jh45li78', 2) #将匹配到的数字替换成S,替换2个
'abcSSjh45li78'
>>> re.sub('\d', 'S', 'abc12jh45li78') #将匹配到所有的数字替换成S
'abcSSjhSSliSS'
>>>
9、re.subn(pattern,repl,string,count = 0,flags = 0 )
执行与相同的操作sub(),但返回一个元组。(new_string, number_of_subs_made)
>>> re.subn('\d', 'S', 'abc12jh45li78', 3)
('abcSSjhS5li78', 3)
>>>
10、re.escape(pattern)
escape中的所有字符图案,除了ASCII字母,数字和'_'。如果要匹配可能包含正则表达式元字符的任意文字字符串,这将很有用。
>>> re.escape('python.exe\n')
'python\\.exe\\\n'
>>>
11、search()与match()方法
Python提供了两种基于正则表达式的原始操作: re.match()仅在字符串的 开头匹配,re.search()检查匹配项,在字符串中的任何位置检查匹配项(这 是Perl的默认设置)。
>>> re.match("c", "abcdef") #Not match
>>> re.search("c", "abcdef") #match
>>>
以开头的正则表达式'^'可用于search()限制字符串开头的匹配项:
>>> re.match("c", "abcdef") #Not match
>>> re.search("^c", "abcdef") #Not match
>>> re.search("^a", "abcdef") #match
>>>
参考:
https://docs.python.org/3.6/library/re.html
https://www.cnblogs.com/Eva-J/articles/7228075.html#_label7
https://www.cnblogs.com/shenjianping/p/11647473.html
\xa0 是不间断空白符
str.replace(u’\xa0’, u’ ‘)
\u3000 是全角的空白符
str.replace(u’\u3000’,u’ ‘)
title.strip(‘\r\n’).replace(u’\u3000’, u’ ‘).replace(u’\xa0’, u’ ‘) content.strip(“”).strip(‘\r\n’).replace(u’\u3000’, u’ ‘).replace(u’\xa0’, u’ ‘)
相关文章:

python-网络爬虫.regular
regular 正则表达式 (regular expression) 正则表达式(regular expression)描述了一种字符串匹配的模式 (pattern), 可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串 中取出符合某个条件的子串等。 正则表达式是由普通…...

手动搭建gateway,项目集成gateway实现Token效果
目录 背景步骤1、首先创建springboot项目2、引入依赖3、配置文件!!!!!(超级重要!!!根据自己的需要进行配置)4、相关类我们在服务中进行的白名单中接口的操作如…...

linux下SVN服务器搭建
在本教程中,我们将介绍如何在Linux系统下搭建Subversion(SVN)服务器。Subversion是一种流行的版本控制系统,它允许多个人在同一项目上进行协作,同时避免了他们各自的更改发生冲突。 安装SVN 在大多数Linux发行版中&am…...

技术等级 TRL 定义
“不同环境、不同目标下TRL表述不一样” 技术等级 TRL 定义 TRL1 基本原理提出和发现 TRL2 技术应用研究 TRL3 完成概念验证,如叶栅试验、燃烧室头部试验等 TRL4 完成模拟部件试验.如压气机性能试验,燃烧室扇形试验 TRL5 完…...

DHorse v1.3.0 发布,基于k8s的发布平台
综述 DHorse是一个简单易用、以应用为中心的云原生DevOps系统,具有持续集成、持续部署、微服务治理等功能,无需安装依赖Docker、Maven、Node等环境即可发布Java、Vue、React应用,主要特点:部署简单、操作简洁、功能快速。 新增特…...

Redis - 缓存的双写一致性
概念: 当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致 那为什么会有不一致的情况呢? 如果不追求一致性,正常有两种做法 先修改数据库 后删除旧的缓存先删除旧的缓存 再修改数据库 我们以先删除旧的…...

opencv03-Mat矩阵API的使用
opencv03-Mat矩阵API的使用 构造方法(具体介绍看API文档) int main() {Mat m1 Mat(200, 100, CV_8UC1);imshow("o1", m1);Mat m2 Mat(Size(100, 200), CV_8UC1);imshow("o2", m2);Mat m3 Mat(200, 100, CV_8UC3, Scalar(255, 0, 0));imshow("o3&…...

2023届浙江大学MPA提面A资格经验总结分享
本人是去年报考的浙大MPA项目,并通过提面获得了A资格,新一年浙大MPA项目提前批面试已经开始了,受达立易考周老师邀请来分享下我的提面经验,希望我的经验能对还在迷茫中的小伙伴有所帮助。 点开提面通知,首先看到…...

BugKu CTF(杂项篇MISC)—想要种子吗
BugKu CTF(杂项篇MISC)—想要种子吗 提 示: 描 述:flag{} 题目下载后是一张图片,打开如下。 一、工具 十六进制编辑器010 editor kali系统文件分离工具binwalk或者foremost 维吉尼亚密码 STEGHIDE图片隐写工具 文章所需的软件下载地址 ARCHPR压缩包密码破解…...

类之间的关系
1、类关系 继承、实现、依赖、组合、聚合 继承:一个类继承另一个类; 实现:一个类实现另一个接口; 依赖:一个类作为另一个的局部变量,方法的参数,临时对象等; 组合:一个类…...

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统
p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class(获得场景中所有该类的actor演员)getFor Each L…...

vscode设置远程登录和免密登录
首先,我们去官网下载VScode 安装过程比较简单,大家自行安装即可,注意建议安装在除C盘外的其他盘中。 安装完成后,打开我们下载好的VScode,点击左侧的Extensions选项,搜索Remote,Install第一项R…...

今日头条面试真题及答案,软件测试工程师面试秘籍
试题1.在浏览器地址栏里输入一个网址,接下来会发生什么? 答案:发生的操作如下。 (1)浏览器查找该网址的IP地址。 (2)浏览器根据解析得到的IP地址向Web服务器发送一个HTTP请求。 &am…...

JavaScript Windows 浏览器对象模型
Window 对象 BOM 的核心就是 window 对象所有浏览器都支持 window 对象。它表示浏览器窗口。所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量是 window 对象的属性。全局函数是 window 对象的方法。HTML DOM 的 document 也是 window 对象的属…...

【uniapp 获取缓存及清除缓存】
小程序及H5 获取缓存: 使用uniapp中的wx.getStorageInfoSync()方法可以获取当前小程序或H5应用的本地缓存信息,如下所示: let storageInfo uni.getStorageInfoSync() console.log(storageInfo)其中,storageInfo是一个对象&…...

【vim 学习系列文章 2 - vim 常用插件配置】
文章目录 1.1 vim 常用插件1.1.1 vim 插件 Pathogen 管理1.1.2 vim 常用插件推荐1.1.3 vim Leaderf1.1.4 vim ripgrep 工具1.1.5 vim Leaderf 配合 rg1.1.6 vim autocmd 配置 1.2 其它类型文件 vimrc 配置1.2.1 System Verilog vimrc 配置 上篇文章:vim 学习系列文章…...

【外卖系统】修改菜品
需求分析 在菜品管理列表页面点击修改按钮,跳转到修改页面,在修改页面回显菜品相关信息并进行修改,在最后点击确定按钮完成修改操作 代码设计 页面发送ajax请求,请求服务端获取分类数据,用于菜品分类下拉框中数据显…...

【暑期每日一练】 day11
目录 选择题 (1) 解析: (2) 解析: (3) 解析: (4) 解析: (5) 解析: 编程题 题一 描…...

神经概率语言模型
本文主要参考《A Neural Probabilistic Language Model》这是一篇很重要的语言模型论文,发表于2003年。主要贡献如下: 提出了一种基于神经网络的语言模型,是较早将神经网络应用于语言模型领域的工作之一,具有里程碑意义。采用神经网络模型预测下一个单词…...

什么是shadow DOM?
Shadow DOM(影子DOM)是一种用于在Web组件中封装HTML、CSS和JavaScript的技术。它是Web组件的一个重要特性,旨在将组件的结构、样式和行为封装在一个独立的、隔离的DOM树中,从而与主文档的DOM树相互隔离。 传统的Web开发中&#x…...

我的 365 天创作纪念日
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...

spark-sql : “java.lang.NoSuchFieldError: out“ 异常解决
异常现象 at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:847)at org.apac…...

Node.js入门笔记(包含源代码)以及详细解析
Node.js 入门笔记源码 01、如何在终端中执行js 文件 目标:将下面的代码语句在中断中执行 代码演示: console.log(Hello World)for (let i 0;i < 3;i) {console.log(6)}方法:在文件上右击打开在终端中执行,然后输入node空格 输…...

windows自动化点击大麦app抢购、捡漏,仅支持windows11操作系统
文章目录 必要条件程序运行必要条件 确保windows11版本操作系统,如果不是可以通过镜像升级为windows11如果已经是windows11操作系统,确保更新到最新版本 修改系统所在时区,将国家或地区改为美国 开启虚拟化 勾选Hyper-V,如果没有则不需要勾选 勾选虚拟机平台 勾选完毕,点…...

vue 拦截 v-html 中 a 标签 href 跳转
记录 template 中 给需要 拦截的 代码片段加上click 方法 click“targetNodeNameClick” <p class"message-content message-content-text" v-html"replaceURLWithHTMLLinks(getText(message))" click"targetNodeNameClick"></p>然…...

分布式id、系统id、业务id以及主键之间的关系
推荐 连分布式ID都理解不了,你是刚培训出来冒充面试官的吧 1 分布式id、系统id、业务id以及主键之间的关系 分布式ID、系统ID、业务ID和主键的关系: 分布式ID:在分布式系统中,由于存在多个独立的节点,为了保证每个节…...

设计模式七:适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口能够协同工作。 适配器模式涉及角色: 目标接口(Target Interface):…...

数据结构---队列
(一)队列之基础补充 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 —— 百科 「队列 Queue」是一种…...

chatGPT在软件测试中应用方式有哪些?
ChatGPT可以在软件测试中以以下方式应用: 1. 自动化对话测试:ChatGPT可以用于自动化对话测试,模拟用户与软件系统进行实时对话。它可以扮演用户的角色,向系统发送各种类型的指令和请求,并验证系统的响应是否符合预期。…...

chatgpt 接口使用(一)
使用api实现功能 参考链接:https://platform.openai.com/examples 安装库: pip3 install openai 例如: import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…...