零基础写python爬虫之神器正则表达式

  • Post category:Python

零基础写Python爬虫之神器正则表达式

正则表达式是一种强大的工具,可以用于匹配、查找和替换文本中的模式。在Python爬虫中,正则表达式常用于解析HTML页面,提取所需的数据。本攻略将详细讲解Python中的正则表达式的基本用法、常用符号和例应用。

基本用法

Python中使用re模块提供的函数来操作正则表达式。模块提供了常用函数:

  • re.search(pattern, string, flags=0):在字符串中搜索正则表达式的第一个匹配项。
  • re.match(pattern, string, flags=0):在字符串的开配正则表达式。
  • re.findall(pattern, string, flags=0):在字符串中正则表达式的所有匹配项。
  • re.sub(pattern, repl, string, count=0, flags=0):在字符串中搜索正则表达式的所有匹配项,并将其换指字符串。

其中,pattern表示正则表达式,string表示匹配字符串,flags参数表示正表式的匹配模式。

下是一个例子,演示如何使用re模块的search()函数:

import re

text = 'The quick brown fox jumps over the lazy dog.'
pattern = r'fox'
result = re.search(pattern, text)
if result:
    print('Match found:', result.group())
else:
    print('Match not found')

在上面的代码中,我们使用正则表达式fox匹配字符串中的foxsearch()用于在字符串中搜索正则表达式的第一个匹配项。运行代码后,输出结果为Match found: fox

常用符号

下面是一些常用的正则表达式符号:

  • .:匹配任意字符,除换行符。
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • []:匹配括号中的任意一个字符。
  • ():将括号中的字符作为一个整体进行匹配。
  • |:匹配两个或个正则表达中的任一个。

下面是一个例子,演示如何使用正则表达式符号匹配字符串中的数字:

import re

text = 'The price is $1099.'
pattern = r'\d+'
result = re.findall(pattern, text)
if result:
    print('Matches found:', result)
else:
    print('Matches not found')

在上面的代码中,我们使用正则表达式\d+匹配字符串中的数字。\d表示匹配一个数字字符,+表示匹配一个或多个字符。findall()函数返回所有匹配的结果。运行后,输出结果为Matches found: ['1099']

示例1:匹配HTML标签中的文本内容

下面是一个例子,演示如何使用正则表达式匹配HTML标签中的文本内容:

import re

text = '<h1>Welcome to website</h>'
pattern = r'<.*?>(.*?)</.*?>'
result = re.search(pattern, text)
if result:
    print('Match found:', result.group(1))
else:
    print('Match not found')

在上面的代码中,我们使用正则表达式<.*?>(.*?)<!--.*?-->匹配HTML标签中的文本内容。<.*?>表示匹配一个或多个任意字符,.*?表示非贪婪匹配,()中的.*?匹配到字符串作为捕获组。search()用于在字符串中搜索正则表达式的第一个匹配项。运行代码,输出结果为Match found: Welcome to my website

示例2:提取网页中的图片链接

下面是另一个例子,演示如何使用正则表达式提取网页中的图片链接:

import re
import requests

url = 'https://www.example.com'
response = requests.get(url)
html = response.text
pattern = r'<img.*?src="(.*?)".*?>'
result = re.findall(pattern, html)
if result:
    print('Matches found:', result)
else:
    print('Matches not found')

在上面的代码中,我们使用正则表达式<img.*?src="(.*?)".*?>匹配网页中的图片链接。<img.*?>表示匹配img标签,src="(.*?)"表示匹配src属性中的链接,()表示匹配到的链接作为捕获组。findall()函数返回所有匹配的结果。运行代码后,输出结果为匹配到的图片链接列表。

以上是两个示例,演示了如何使用正则表达配HTML标签中的文本内容和提取网页中的图片链接。正则表达式是Python爬虫中常用的工具,望读者可以通过这些示例更好地理解正则表达式的应用。