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))

1236

被折叠的 条评论
为什么被折叠?



