首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 2.3 正则表达式 在Python网络爬虫的开发过程中,正则表达式(Regular Expressions)是一项不可或缺的技能。它们提供了一种强大而灵活的方式来匹配、查找、替换字符串中的文本。无论是处理HTML文档中的特定数据,还是清洗网页内容中的无用信息,正则表达式都是一个极其有用的工具。本章将深入介绍正则表达式的概念、语法、Python中的实现以及在网络爬虫中的实际应用。 #### 2.3.1 正则表达式基础 **定义**:正则表达式,又称规则表达式,是一种文本模式,包括普通字符(如a到z之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 **作用**: - **搜索**:在文本中搜索符合正则表达式的字符串。 - **验证**:检查文本是否符合特定的模式。 - **提取**:从文本中提取符合正则表达式模式的部分。 - **替换**:在文本中替换符合正则表达式的部分。 #### 2.3.2 正则表达式的语法 正则表达式由一系列字符和元字符组成,这些字符和元字符共同定义了搜索文本的模式。以下是一些常用的元字符及其意义: - `.`:匹配除换行符以外的任意单个字符。 - `^`:匹配字符串的开始位置。 - `$`:匹配字符串的结束位置。 - `*`:匹配前面的子表达式零次或多次。 - `+`:匹配前面的子表达式一次或多次。 - `?`:匹配前面的子表达式零次或一次。 - `{n}`:n 是一个非负整数。匹配确定的 n 次。 - `{n,}`:n 是一个非负整数。至少匹配n 次。 - `{n,m}`:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 - `[xyz]`:字符集合。匹配所包含的任意一个字符。 - `[^xyz]`:负值字符集合。匹配未包含的任意字符。 - `\d`:匹配一个数字字符。等价于 `[0-9]`。 - `\D`:匹配一个非数字字符。等价于 `[^0-9]`。 - `\s`:匹配任何空白字符,包括空格、制表符、换页符等。 - `\S`:匹配任何非空白字符。 - `\w`:匹配包括下划线的任何单词字符。等价于`[A-Za-z0-9_]`。 - `\W`:匹配任何非单词字符。 - `|`:逻辑“或”操作。 - `()`:分组。 - `\`:转义字符,用于匹配那些被解释为特殊含义的字符。 #### 2.3.3 Python中的正则表达式 在Python中,`re`模块提供了正则表达式的支持。这个模块允许你编译正则表达式对象,以及使用它们进行匹配、搜索、替换等操作。 **基本用法**: 1. **导入re模块**: ```python import re ``` 2. **编译正则表达式**: 使用`re.compile()`函数可以编译一个字符串形式的正则表达式,返回一个正则表达式对象。这不是必需的,但可以提高匹配效率,特别是在多次使用同一模式时。 ```python pattern = re.compile(r'\d+') ``` 3. **匹配**: - `match()`:从字符串的起始位置匹配正则表达式,如果起始位置匹配成功则返回一个匹配对象,否则返回None。 ```python match = pattern.match('123abc') if match: print("Match found:", match.group()) ``` - `search()`:扫描整个字符串,返回第一个匹配的结果。 ```python search = pattern.search('abc123def') if search: print("Search found:", search.group()) ``` 4. **查找所有匹配项**: 使用`finditer()`或`findall()`方法查找字符串中所有匹配正则表达式的部分。 ```python all_matches = pattern.findall('123abc456def789') print("All matches:", all_matches) for match in pattern.finditer('123abc456def789'): print("Match found:", match.group()) ``` 5. **替换**: 使用`sub()`方法可以在字符串中替换所有匹配正则表达式的部分。 ```python new_string = re.sub(r'\d+', 'NUMBER', 'The year is 2023.') print(new_string) ``` #### 2.3.4 正则表达式在网络爬虫中的应用 在网络爬虫中,正则表达式常用于提取HTML页面中的特定信息,如链接、标题、图片URL等。以下是一个简单的例子,展示如何使用正则表达式从HTML中提取所有图片链接: ```python import re html_content = """ <html> <body> <p>This is a test page.</p> <img src="image1.jpg" alt="Image 1"> <img src="image2.png" alt="Image 2"> </body> </html> """ # 编译正则表达式以匹配img标签的src属性 img_pattern = re.compile(r'<img\s+src="([^"]*)"', re.IGNORECASE) # 查找所有匹配项 img_urls = img_pattern.findall(html_content) print("Image URLs:", img_urls) ``` 在这个例子中,正则表达式`<img\s+src="([^"]*)"`用于匹配所有`img`标签的`src`属性。`([^"]*)`是一个捕获组,它匹配并捕获引号之间的任意字符(除了引号本身),直到遇到下一个引号为止。 #### 2.3.5 注意事项与最佳实践 - **避免过度复杂**:尽量保持正则表达式的简单性,复杂的表达式难以理解和维护。 - **使用原始字符串**:在Python中,正则表达式通常以原始字符串(前缀为`r`的字符串)的形式给出,以避免反斜杠的转义问题。 - **测试与调试**:在将正则表达式用于实际任务之前,使用不同的测试案例来验证其正确性。 - **性能考虑**:复杂的正则表达式可能会影响性能,特别是在处理大型文本时。 通过掌握正则表达式的概念、语法和Python中的实现方法,你可以在网络爬虫项目中更加高效地提取和处理数据。正则表达式是Python网络爬虫开发中不可或缺的工具之一,希望本章的内容能帮助你更好地理解和应用这一强大的技术。
上一篇:
2.2 requests的使用
下一篇:
2.4 httpx的使用
该分类下的相关小册推荐:
Python数据分析与挖掘实战(下)
实战Python网络爬虫
Python合辑12-面向对象
Python与办公-玩转PPT
Python编程轻松进阶(二)
Python面试指南
Python3网络爬虫开发实战(下)
Python与办公-玩转PDF
剑指Python(万变不离其宗)
Python合辑7-集合、列表与元组
Python编程轻松进阶(三)
Python合辑3-字符串用法深度总结