Python爬虫教程:正则表达式深度解析
117 浏览量
更新于2024-08-29
收藏 787KB PDF 举报
"这篇教程是关于Python爬虫学习与教学的第三部分,主要讲解了正则表达式的使用。"
在Python编程中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能用于搜索、替换和提取符合特定模式的字符串。在爬虫开发中,正则表达式常用于解析和提取网页中的数据。本教程首先引入了`re`模块,它是Python内置的正则表达式库,用于处理正则表达式。
`re.search()`函数用于在字符串中查找第一个匹配正则表达式的子串。它返回一个匹配对象,如果未找到匹配项,则返回`None`。示例中的`r`前缀表示原始字符串,确保字符串中的反斜杠 `\` 不被当作转义字符处理。
正则表达式中的`.`字符代表任意单个字符,这与Linux命令行工具`grep`中的`.`用法相似。为了匹配IP地址,我们可以编写一个复杂的正则表达式,例如:
```python
re.search(r'((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])', '192.10.160.10')
```
此正则表达式由四个部分组成,每个部分匹配0-255之间的数字,中间用点分隔。这可以有效地捕获IPv4地址。
正则表达式的一个关键概念是贪婪和非贪婪模式。默认情况下,正则表达式会尝试匹配尽可能多的字符,这就是贪婪模式。若要改为非贪婪模式,只需在量词(如`*`、`+`、`?`)后面添加`?`,使正则表达式尽可能少地匹配字符。
`\A`和`\Z`分别用于匹配字符串的开始和结束位置。`^`匹配行首,而`$`匹配行尾,但它们在使用时不区分多行模式。
举例来说,`\B`和`\b`用于匹配单词边界。如果不想匹配含有下划线的单词,可以利用这两个标志。
正则表达式还可以通过编译(`re.compile()`)来提高性能,编译后的模式可以重复使用。`search()`和`match()`函数都会返回匹配对象,其中`start()`和`end()`方法可以获取匹配的开始和结束索引,`span()`返回一个元组,包含匹配的起始和结束索引。`findall()`方法返回所有匹配的子串,结果是一个列表。
在处理HTML或XML文档时,正则表达式常用于提取链接或图片地址。例如,以下代码片段展示了如何使用正则表达式从HTML字符串中提取图片URL:
```python
def get_img(html):
p = r'<img class="BDE_Image" src="([^"]+\.jpg)"'
img_list = re.findall(p, html)
return img_list
```
这段代码查找所有`<img>`标签,其中`class`属性为`BDE_Image`,并且`src`属性指向以`.jpg`结尾的URL。`findall()`返回这些URL组成的列表。
在编写复杂的正则表达式时,可以使用`VERBOSE`标志(`re.VERBOSE`),这样可以在正则表达式中添加注释,并使用空格和换行来提高可读性。例如:
```python
pattern = re.compile(r"""
<img # 开始的<img标签
class="BDE_Image" # 类名为BDE_Image
src=" # src属性开始
([^"]+\.jpg) # 图片URL,直到双引号结束,且以.jpg结尾
" # src属性的双引号结束
""", re.VERBOSE)
```
正则表达式是Python爬虫中不可或缺的一部分,用于高效地处理和提取数据。通过熟练掌握正则表达式,可以极大地提高数据提取的效率和准确性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2018-08-29 上传
2020-05-16 上传
点击了解资源详情
2021-03-28 上传
2022-05-29 上传
2021-04-11 上传
weixin_38716519
- 粉丝: 13
- 资源: 910
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析