1. 正则表达式简介
在编写爬虫的过程中,我们需要解析网页的内容。那么作为文本解析利器的正则表达式当然可以运用到我们的爬虫开发中。其实页面解析过程无非是从海量的字符串中将我们所需要的数据匹配并剥离出来,所以在正式的爬虫开发中正则会经常被用到。
正则表达式是对字符串操作的逻辑公式。在提取网页的数据的时候,我们需要把源代码转换成字符串,然后通过正则表达式匹配想要的数据。
在我们开始使用正则表达式进行模式查找之前,我们需要先熟悉一下正则表达式里面的字符的基本含义,熟悉了它们之后,我们就可以很方便的书写一些正则表达式进行模式匹配了。
2. 正则表达式基本语法
正则表达式的字符和含义
3. 正则表达式的常用方法
我们开发爬虫使用的是 Python 语言,那么在 Python 中如何使用正则表达式呢?在 Python 中已经内置了正则表达式模块 re
,re
库是内置在 Python 中的,不需要我们进行安装,直接导入使用即可。
这里我们主要详细讲解一下 re
库中的几种常用方法。这几种方法也是会经常用在爬虫开发中的,只要掌握了这些种方法,基本上在爬虫开发中需要使用正则表达式的问题都可以解决。
3.1 re.findall
findall 方法是找到所有的符合规则的匹配内容,具体语法如下:
- 1
来看个例子,找出所有的字符串中的数字:
- 1
- 2
- 3
- 4
- 5
- 6
3.2 re.search
re.search 扫描整个字符串,并返回第一个成功的匹配。具体语法如下:
- 1
来看个例子:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3.3 re.match
如果 string 开始的 0 或者多个字符匹配到了正则表达式样式,就返回一个相应的匹配对象 。 如果没有匹配,就返回 None ;注意它跟零长度匹配是不同的。
- 1
实例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
3.4 re.split
用 pattern 分开 string 。 如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里。如果 maxsplit 非零, 最多进行 maxsplit 次分隔, 剩下的字符全部返回到列表的最后一个元素
- 1
实例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3.5 re.sub
返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。 如果样式没有找到,则不加改变地返回 string。 repl 可以是字符串或函数;如为字符串,则其中任何反斜杠转义序列都会被处理。 也就是说,\n 会被转换为一个换行符,\r 会被转换为一个回车附,依此类推。 未知的 ASCII 字符转义序列保留在未来使用,会被当作错误来处理。 其他未知转义序列例如 & 会保持原样。 向后引用像是 \6 会用样式中第 6 组所匹配到的子字符串来替换
- 1
实例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
3.6 re.subn
行为与 sub() 相同,但是返回一个元组 (字符串, 替换次数).
- 1
4. 小结
这一小节,我们学习了正则表达式的基本语法,以及通过多个例子展示了正则表达式的使用方法,正则表达式难有一点大, 同学们需要多加练习,才能牢固的掌握。