python3网络爬虫学习——正则表达式

正则表达式是处理字符串的强大工具,有着自己的语法结构。

1.实例引入

可以使用开源中国的 http://tool.oschina.net/regex# 可以看到有许多匹配项,正则表达式匹配就是按照一定规则将特定的文本提取出来。比如电子邮件开头是一段字符串,然后是一个@符号,最后是某个域名,这是由特定的格式组成的。至于匹配的具体规则,可以参见这个博客https://www.jianshu.com/p/773c32dcd254     一些规则的汇总可以看这个博主https://www.cnblogs.com/arcserver/p/6681914.html

2.match()

这里介绍一下常用的匹配方法——match(),向他传入要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否匹配字符串。当然在requests库里使用正则表达式有关的函数和库都需要引用re模块。

match()方法中第一个参数传入了正则表达式,第二个参数传入了要匹配的字符串。

import re
content = ‘hello 123 4567 world_this is a regex demo‘
print(len(content))
result = re.match(‘^hello\s\d\d\d\s\d{4}\s\w{10}‘,content)
print(result)
print(result.group())
print(result.span())

运行结果如下

41
<_sre.SRE_Match object; span=(0, 25), match=‘hello 123 4567 world_this‘>
hello 123 4567 world_this
(0, 25)

开头的 ^ 是表示匹配字符串的开头,也就是以hello开头,\s表示匹配空白字符串,\d表示匹配数字,\d{4}则表示匹配四个连续的数字,\w表示匹配数字,字母或下划线,同理\w{10}表示连续的十个字母

打印结果输出表示为SRE_Match类型数据表示匹配成功,该类型有两个属性,其中一个span表示输出匹配的范围,匹配到的字符在原字符串中的位置范围,这里显示为0到25

  • 匹配目标
import re
content = ‘hello 1234567 world_this is a regex demo‘
print(len(content))
result = re.match(‘^hello\s(\d+)\sworld‘,content)
print(result)
print(result.group())
print(result.group(1))
print(result.span())

40
 <_sre.SRE_Match object; span=(0, 19), match=‘hello 1234567 world‘>
 hello 1234567 world
 1234567
 (0, 19)

如果想从字符串中提取出特定目标,比如一串数字,那么可以使用符号(),比如上述代码,使用了一个(),其表示了子表达式开始和结束的位置,然后使用group(1),这个与group()不同,前者会找出第一个被括号包起来的匹配结果,而后者则会输出所有匹配结果。

  • 通用匹配

向上述那样匹配需要的工作量太大了,因此我们为了简便,,可以通通使用  .(点)来匹配任何字符,用*(星)代表匹配前面的字符无限次,用XX$来表示以XX结尾的字符串,比如改为:

result = re.match(‘^hello.*Demo$‘,content)可以匹配整个content

  • 贪婪与非贪婪

有时候使用.*表示时,可能不会出现我们需要的结果,这就涉及到他的贪婪和非贪婪机制,上实例

import re
content = ‘Hello 1234567 World_This is a Regex Demo‘
print(len(content))
result = re.match(‘^He.*(\d+).*Demo$‘,content)
print(result)
print(result.group(1))

40
 <_sre.SRE_Match object; span=(0, 40), match=‘Hello 1234567 World_This is a Regex Demo‘>
 7

结果为7却不是1234567,是因为d+表示的是后面的数字但并未表示多少位,而.*有一个机制,就是尽可能多的匹配字符,那么就会导致他只留了7给d+,那么作为贪婪机制的他,也有一个非贪婪机制的,那就是.*?  他会尽可能的少匹配字符,如果将上述He后的字符改为.*?那么就会匹配尽可能少的字符,就会把1234567留给d+

虽然这样不错,但有时候匹配结果在结尾的时候,非贪婪匹配可能就不会匹配到任何内容了比如

content = ‘Hello 1234567 World_This is a Regex Demo‘
print(len(content))
result = re.match(‘^He.*(\d+).*Regex.*?‘,content)
print(result)
print(result.group(1))

40
<_sre.SRE_Match object; span=(0, 35), match=‘Hello 1234567 World_This is a Regex‘>
7

还有需注意的是只有最末尾的字符才可以使用XXX$结尾

  • 修饰符

上述的案例中我们如果加入了换行符,那么结果却会报错,系统显示匹配不到,系统返回None,真是因为.*匹配的都是除换行符外的任意字符,因此需要在其中加入一个修饰符,使系统可以辨识出换行符,下面上实例:

import re
content = ‘‘‘Hello 1234567 Worl
d_This is a Regex Demo‘‘‘
print(len(content))
result = re.match(‘^He.*(\d+).*Regex.*?‘,content,re.S)
print(result)
print(result.group(1))

这样得到的结果和上述一样,注意的就是换行后单点号变成三个点,不然系统会识别不了,以下列出一些常见的修饰符

re.I       使匹配对大小写不敏感

re.L         做本地化识别匹配

re.M        多行匹配,影响^和$

re.S        使 . 匹配包括换行在内的所有字符

re.U      根据Unicode字符集解析字符。这个标志影响\w, \W  \b  \8

re.X      该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

原文地址:https://www.cnblogs.com/gausstu/p/9521190.html

时间: 2024-11-06 03:54:53

python3网络爬虫学习——正则表达式的相关文章

python3网络爬虫学习——基本库的使用(1)

最近入手学习Python3的网络爬虫开发方向,入手的教材是崔庆才的<python3网络爬虫开发实战>,作为温故所学的内容同时也是分享自己操作时的一些经验与困惑,所以开了这个日记,也算是监督自己去学习.在这一系列的日记中我也会随时加上一些书中没有的内容作为对所学知识的一个补充. (1)使用urllib库 在python3中,把python2的urllib和urllib2两个库合并了,同时作为了其内置的HTTP请求库,不需要额外安装,这个库包括四个模块 request:最基本的HTTP请求模块,可

python3网络爬虫学习——基本库的使用(2)

2.request 首先上实例 import urllib.request request = urllib.request.Request('https://python.org') response = urllib.request.urlopen(request) print(response.read().decode('utf-8')) 与之前一样生成了python官网的内容,但这次我们构造的是一个Request类,我们可以将请求独立成一个对象,也可以配置参数 class.urllib

python3网络爬虫学习——使用requests(1)

reuqests库中有很多便捷的方法,比如以GET方式获得网页,在requests库中就是方法get(),上代码 import requests r = requests.get('https://www.baidu.com') print(type(r)) print(r.status_code) print(type(r.text)) print(r.text) print(r.cookies) 相当于urlopen的方法,得到一个Response对象,然后分别输出他的类型,状态码,相应体的

Python3网络爬虫(七):使用Beautiful Soup爬取小说

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简

Python3网络爬虫(八):爱奇艺等主流视频网站的VIP视频破解(在线观看+视频下载)

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.前言 没有会员,想在线观看或下载爱奇艺.PPTV.优酷.网易公开课.腾讯视频.搜狐视频.乐视.土豆.A站.B站等主流视频网站的VIP视频?又不想充会员怎么办?博主本次写的VIP视频破解助手也许可以帮你解决烦恼. 二.软件使用说明 1.软件下载 软件运行平台:Windows 注意:该软件已经打包成exe可

Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Python3网络爬虫(十):这个帅哥.肌肉男横行的世界(爬取帅哥图) - Jack-Cui - 博客频道 - CSDN.NET Jack-Cui 努力-是为了将运气成分降到最低 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb

《Python3网络爬虫实战案例(崔庆才著)》 中文版PDF下载,附源代码+视频教程

<Python3网络爬虫实战案例(崔庆才著)>中文版PDF下载,附源代码+视频教程,带目录资料下载:https://pan.baidu.com/s/1OzxyHQMLOzWFMzjdQ8kEqQ 原文地址:http://blog.51cto.com/7369682/2330247

python3网络爬虫系统学习:第一讲 基本库urllib

在python3中爬虫常用基本库为urllib以及requests 本文主要描述urllib的相关内容 urllib包含四个模块:requests——模拟发送请求 error——异常处理模块 parse——关于URL处理方法的工具模块 robotparser——通过识别网站robot.txt判断网站的可爬取内容 一.发送请求 urllib库发送请求主要使用request模块中的两个内容:urlopen()方法以及Requests类,其中Requests类是结合urlopen()方法来使用的. 首