Python爬虫中使用re(正则表达式)

文章目录

Python爬虫中使用re(正则表达式)

一、引言

在Python爬虫开发中,正则表达式(re)是一个强大的工具,它可以帮助我们从文本中提取、替换或者分割出我们想要的数据。正则表达式通过定义一系列的规则,来描述、匹配一系列符合某个句法规则的字符串。在爬虫中,我们经常需要从HTML页面中提取信息,而正则表达式提供了一种灵活且高效的方式来实现这一目的。

二、正则表达式的基本概念

1、正则表达式的组成

正则表达式由一系列字符组成,这些字符包括普通字符(例如,字母a到z)和特殊字符(称为"元字符")。普通字符表示它们自己,而元字符具有特殊含义。例如,.(点)匹配任意单个字符,*(星号)表示前面的字符可以出现零次或多次。

2、正则表达式的Python模块

Python中的re模块提供了对正则表达式的支持。通过这个模块,我们可以执行各种正则表达式相关的操作,如搜索、匹配、替换和分割等。

表达式类型 表达式 描述
字面量匹配 abc 匹配字符串 "abc"
任意字符 . 匹配任意单个字符(除了换行符)
字符类 [abc] 匹配任何一个字符 a、b 或 c
否定字符类 [^abc] 匹配除了 a、b、c 之外的任意单个字符
范围 [a-z] 匹配任何一个小写字母
预定义字符类 \d 匹配任何一个数字(0-9)
预定义字符类 \D 匹配任何非数字字符
预定义字符类 \w 匹配任何字母数字字符(等价于 [a-zA-Z0-9_]
预定义字符类 \W 匹配任何非字母数字字符
预定义字符类 \s 匹配任何空白字符(空格、制表符、换行符等)
预定义字符类 \S 匹配任何非空白字符
量词 * 匹配前面的子表达式0次或多次
量词 + 匹配前面的子表达式1次或多次
量词 ? 匹配前面的子表达式0次或1次
量词 {n} 匹配确定的 n 次数
量词 {n,} 至少匹配 n 次
量词 {n,m} 至少匹配 n 次,但不超过 m 次
非贪婪匹配 *? 匹配前面的子表达式0次或多次,尽可能少地匹配
非贪婪匹配 +? 匹配前面的子表达式1次或多次,尽可能少地匹配
非贪婪匹配 ?? 匹配前面的子表达式0次或1次,尽可能少地匹配
非贪婪匹配 {n,m}? 至少匹配 n 次,但不超过 m 次,尽可能少地匹配
(...) 将多个表达式组合成一个组,作为一个单独的单元
选择 ` `
断言 ^ 匹配输入字符串的开始位置
断言 $ 匹配输入字符串的结束位置
断言 \b 匹配一个单词边界,单词由字母、数字或下划线组成
断言 \B 匹配非单词边界
转义特殊字符 \ 匹配特殊字符的字面量(例如,\n 匹配换行符)
1.1、步骤

以下是一些常用的re模块函数:

  • re.search(pattern, string):在字符串中搜索第一个与正则表达式匹配的结果。
  • re.findall(pattern, string):查找字符串中所有与正则表达式匹配的内容,并以列表形式返回所有匹配的结果。
  • re.sub(pattern, repl, string):替换字符串中所有匹配正则表达式的内容。
  • re.split(pattern, string):根据匹配的正则表达式分割字符串,返回一个列表。
  • re.compile(pattern):编译正则表达式模式,返回一个正则表达式对象,以提高匹配效率。

三、使用示例

1、提取电影信息

假设我们需要从一个电影信息页面中提取电影名称、主演和上映时间等信息。以下是一个使用正则表达式提取这些信息的示例代码:

python 复制代码
import requests
import re

# 请求URL
url = 'https://maoyan.com/board/4'
# 请求头部
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
# 解析页面函数
def parse_html(html):
    pattern = re.compile('<p class="name"><a href=".*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:\\d+}">(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', re.S)
    items = re.findall(pattern, html)
    for item in items:
        yield {
            '电影名称': item[1],
            '主演': item[2].strip(),
            '上映时间': item[3]
        }

# 保存数据函数
def save_data():
    f = open('maoyan_top100.txt', 'w', encoding='utf-8')
    response = requests.get(url, headers=headers)
    for item in parse_html(response.text):
        f.write(str(item) + '\n')
    f.close()

if __name__ == '__main__':
    save_data()

四、总结

正则表达式在Python爬虫中扮演着重要的角色,它能够帮助我们从复杂的HTML页面中提取出结构化的数据。通过掌握正则表达式的基本概念和Python中的re模块,我们可以更加高效地进行网页数据的抓取和处理。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

相关推荐
漫路在线25 分钟前
JS逆向-某易云音乐下载器
开发语言·javascript·爬虫·python
成功人chen某3 小时前
配置VScodePython环境Python was not found;
开发语言·python
2301_786964363 小时前
EXCEL Python 实现绘制柱状线型组合图和树状图(包含数据透视表)
python·microsoft·excel
skd89994 小时前
小蜗牛拨号助手用户使用手册
python
小生凡一4 小时前
搜索引擎工作原理|倒排索引|query改写|CTR点击率预估|爬虫
爬虫·搜索引擎
「QT(C++)开发工程师」4 小时前
STM32 | FreeRTOS 递归信号量
python·stm32·嵌入式硬件
CodeJourney.4 小时前
基于MATLAB的生物量数据拟合模型研究
人工智能·爬虫·算法·matlab·信息可视化
史迪仔01124 小时前
[python] Python单例模式:__new__与线程安全解析
开发语言·python·单例模式
胡耀超4 小时前
18.自动化生成知识图谱的多维度质量评估方法论
人工智能·python·自动化·知识图谱·数据科学·逻辑学·质量评估
一只专注api接口开发的技术猿4 小时前
企业级电商数据对接:1688 商品详情 API 接口开发与优化实践
大数据·前端·爬虫