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模块,我们可以更加高效地进行网页数据的抓取和处理。


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

参考文章

相关推荐
苏言の狗1 分钟前
Pytorch中关于Tensor的操作
人工智能·pytorch·python·深度学习·机器学习
用余生去守护24 分钟前
python报错系列(16)--pyinstaller ????????
开发语言·python
数据小爬虫@29 分钟前
利用Python爬虫快速获取商品历史价格信息
开发语言·爬虫·python
小白学大数据1 小时前
如何使用Selenium处理JavaScript动态加载的内容?
大数据·javascript·爬虫·selenium·测试工具
是Dream呀1 小时前
Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
网络·python·神经网络
菜狗woc1 小时前
opencv-python的简单练习
人工智能·python·opencv
最爱番茄味1 小时前
Python实例之函数基础打卡篇
开发语言·python
程序猿000001号1 小时前
探索Python的pytest库:简化单元测试的艺术
python·单元测试·pytest
engchina2 小时前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
qq_375872692 小时前
15爬虫:下载器中间件
爬虫