Python网络爬虫案例实战:解析网页:正则表达式解析网页

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

Python网络爬虫案例实战:解析网页:正则表达式解析网页

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言中,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。

图5-1展示了使用正则表达式进行匹配的流程。

正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,那么这个过程会稍微有一些不同。

在提取网页中的数据时,可以先把源代码变成字符串,然后用正则表达式匹配想要的数据。使用正则表达式可以迅速地用极简单的方式实现字符串的复杂控制。
在这里插入图片描述

表5-1是常见的正则字符和含义。
在这里插入图片描述
下面介绍Python正则表达式的3种方法,分别是match、search 和findall。

5.2.1字符串匹配

本节利用 Python 中的re.match实现字符串匹配并找到匹配的位置。而re.match的意思是从字符串起始位置匹配一个模式,如果从起始位置匹配不了,match()就返回none。re.match的语法格式为:

re.match(string[,pos[,endpos]]| re.match(pattern,string[,flags]

match只找到一次可匹配的结果即返回。
这个方法将从string的 pos下标处开始尝试匹配 pattern;如果 pattern结束时仍可匹配,则返回一个match对象;如果匹配过程中 pattern无法匹配,或者匹配未结束就已到达endpos,则返回none。pos 和 endpos的默认值分别为0和len(string);re.match()无法指定这两个参数,参数 flags用于编译pattern时指定匹配模式。
注意:这个方法并不是完全匹配。当pattern结束时,若 string还有剩余字符,则仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符’$'。

[例5-1)使用两个字符串匹配并找到匹配的位置。

# encoding: UTF-8 
import re 
m=re.match('www','www.taobao.com')
print('匹配的结果:',m)
print('匹配的起始与终点:',m.span())
print('匹配的起始位置:',m.start())
print('匹配的终点位置:',m.end())       

运行程序,输出如下:

匹配的结果: <re.Match object; span=(0, 3), match='www'>
匹配的起始与终点: (0, 3)
匹配的起始位置: 0
匹配的终点位置: 3 

上面例子中的pattern只是一个字符串,也可以把 pattern改成正则表达式,从而匹配具有一定模式的字符串,例如:

# encoding: UTF-8 
import re 

line = 'Fat apples are smarter than bananas, is it right?'

# 使用 re.match 进行匹配
m = re.match(r'(\w+) (\w+) (?P<sign>.*)', line)

# 检查是否匹配成功

print('匹配的整句话:', m.group(0))

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值