Python爬虫入门教程–正则表达式完全指南(五)
本攻略将详细讲解Python爬虫中正则表达式的使用,包括正则表达式的基本语法、常用的正则表达式模式、以及如何在Python中使用正则表达式进行数据提取。
正则表达式基本语法
正则表式是一种用于匹配文本的模式。在Python中,可以使用re模块来使用正则表达式。下面是一些常用的正则表达式基本语法:
.
:匹配任意字符,除了换行符。*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。?
:匹配前面的字符次或一次。^
:匹配字符串的开头。$
:匹配字符串的结尾。[]
:匹配括号的任意一个字符。|
:匹配左右两边任意一个表达式。()
:分组,可以用于提取匹配的子字符串。
常用的正则表达式模式
在Python爬虫中,我们经常需要使用正则表达式来解析HTML、XML等文本数据。下面是一些常用的正则表达式模式:
- 匹配HTML标签:
<[^>]+>
- 匹配HTML标签中的属性:
[a-zA-Z]+=\"[^\"]*\"
- 匹配HTML标签中的文本:
>([^<]+)<
- 匹配URL:
http[s]?:(?:[a-zA-Z0-9]|[$@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+
- 匹配邮箱地址:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
- 匹配手机号码:
1[3-9]\d{9}
- 匹配身份证号码:
\{17}[\d|x]|\d{15}
- 匹配IP地址:
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
在Python中使用正则表达式
在Python中,我们可以使用re模块来使用正则表达式。下面是一个例子,演示如何使用正则表达式提取HTML中的链接:
import re
html = '<a href="http://www.example.com">Example</a>'
pattern = r'href="(.+?)"'
result = re.search(pattern, html)
if result:
print('Match found:', result.group(1))
else:
print('Match not found')
在上面的代码中,我们使用正则表达式href="(.+?)"
进行匹配。然后,我们使用search()函数进行匹配。search()函数返回第一个匹配的结果。如果匹配成功,我们使用group()函数获取匹配到的文本。运行代码后,结果为Match found: http://www.example.com
。
下面是另一个例子,演示如何使用正则表达式提取HTML中的所有链接:
import re
html = '<a href="http://www.example.com">Example</a><a href="http://www.google.com">Google</a>'
pattern = r'href="(.+?)"'
result = re.findall(pattern, html)
if result:
print('Matches found:', result)
else:
print('Matches not found')
在上面的代码中,我们使用正则表达式href="(.+?)"
进行匹配。然后,我们使用findall()函数进行匹配。findall()函数返回所有匹配的结果。如果匹配成功,我们使用group()函数获取匹配到的文本。运行代码后,结果为Matches found: ['http://www.example.com', 'http://www.google.com']
。
示例说明
示例1:从HTML中提取链接
下面是一个例子,演示如何从HTML中提取链接:
import re
html = '<a href="http://www.example.com">Example</a>'
pattern = r'href="([^"]*)"'
result = re.search(pattern, html)
if result:
print('Match found:', result.group(1))
else:
print('Match not found')
在上面的代码中,我们使用正则表达式href="([^"]"
进行匹配。然后,我们使用search()函数进行匹配。search()函数返回第一个匹配的结果。如果匹配成功,我们使用group(1)函数获取匹配到的链接。运行代码后,结果为`Match found: http://www.example.com。
示例2:从JSON中提取特定字段
下面是一个例子,演示如何从JSON中提取特定字段:
import re
import json
json_data = '{"name": "John", "age": 30, "city": "New York"}'
pattern = r'"name": "([^"]*)"'
result = re.search(pattern, json_data)
if result:
name = result.group(1)
data = json.loads(json_data)
print('Name:', name)
print('Age:', data['age'])
print('City:', data['city'])
else:
print('Match not found')
在上面的代码中,我们使用正则表达式"name": "([^"]*)"
进行匹配。然后,我们使用search()函数进行匹配。search()函数返回第一个匹配的结果。如果匹配成功,我们使用group(1)函数获取匹配到的名称。然后,我们使用json.loads()函数将JSON数据转换为Python对象。最后,我们可以使用Python对象来访问特定字段。运行代码后,结果:
Name: John
Age: 30
City: New York
以上是Python爬虫入门教程–正则表达式完全指南(五)的完整内容。在实际应用中,我们可以根据具体情选择合适的正则表达式模式,以便快速、准确地解析HTML、XML等文本数据。