玩转python爬虫之正则表达式

  • Post category:Python

玩转Python爬虫之正则表达式

正则表达式是一种用于描述字符串模式的语言,可以用于匹配、查找、替换和割字符串。在Python爬虫中,正表达式是非常重要的工具,可以用于从网页中提取所需的信息。本文将详细讲解如何使用正则表达式进行Python爬虫,包括正则表达式语法、re模块的常用函数以及两个常用的匹配实例。

正则表达式语法

正则表达式由一些特殊字符和普通字符组成,用于字符串模式。下面是一些常用的正则表达式特殊字符:

  • .:匹配任意字符,除了换行符。
  • *:匹配前面的字符零次或多次。
  • +:匹前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • ^:匹配字符串的起始位置。
  • $:匹配字符串的结束位置。
  • []:匹配方括号中的任意一个字符。
  • ():标记一个子表达式的开始和结束位置。
  • |:匹配两个或多个表达式中的任意一个。

re模块常用函数

re模块提供了一些常用函数,用于对字符串进行正则表达式匹配、查找、替换和割字符串等操作。下面是一些常用的re模块函数:

  • re.match(pattern, string, flags=0):尝试从字符串的起始位置匹配一个模式,如果匹配成功,则返回一个匹配对象;如果匹配失败,则返回None。
  • re.search(pattern, string, flags=0):在字符串中查找正则表达式的第一个匹配项,并返回一个匹配对象。如果字符串中没有匹配,则返回None。
  • re.findall(pattern, string, flags=0):在字符串中查找所有匹配项,并返回一个列表。如果字符串中没有匹配项,则返回空列表。
  • re.sub(pattern, repl, string, count=0, flags=0):在字符串中查找所有匹配项,并用指定的字符串替换它们。如果字符串中没有匹配项,则返回原始字符串。
  • re.split(pattern, string, maxsplit=0, flags=0):根据正则表达式的模式割字符串,并返回一个列表。

示例

下面是两个常用的匹配实例,演示了如何使用正则表达式进行Python爬虫。

示例1:匹配网页中的图片链接

import re
import requests

# 定义正则表达式
pattern = r'<img.*?src="(".*?>'

# 发送请求
response = requests.get('https://www.example.com')

# 使用re.findall()方法查找匹配项
matches = re.findall(pattern, response.text)

# 输出匹配结果
for match in matches:
    print(match)

在这个示例中,我们定义了一个正则表达式<img.*?src="(.*?)".*?>,用于匹配网页中的图片链接。然后,我们使用requests库发送请求,获取网页的HTML代码。最后,我们使用re.findall()方法查找匹配项,并输出匹配结果。

示例2:匹配网页中的电子邮件地址

import re
import requests

# 定义正则表达式
pattern = r'\w+@\w+\.\w+'

# 发送请求
response = requests.get('https://www.example.com')

# 使用re.findall()方法查找匹配项
matches = re.findall(pattern, response.text)

# 输出匹配结果
for match in matches:
    print(match)

在这个示例中,我们定义了一个正则表式\w+@\w+\.\w+,用于匹配网页中的电子邮件地址。然后,我们使用requests库发送请求,获取网页的HTML代码。最后,我们使用re.findall()方法查找匹配项,并输出匹配结果。

结论

本文详细讲解了如何使用正则表达式进行Python爬虫,包括正则表达式语法、re模块的常用函数以及两个常用的匹配实例。使用正则表达式可以方便地从网页中提取所需的信息,但需要注意正则表达式的语法和特殊字符含义以保证匹配字符串中的文本。在实际应用中需要根据具体需求选择合适的正则表达式和re模块函数。