返回
剖析python爬虫实践的细节:学习正则表达式应对数据保存的细节
后端
2024-02-08 06:55:13
在昨日的文章中,我们解决了绝大多数的正则表达式问题。但目前还存在一个问题,那就是当html文档信息出现以下情况时,该如何处理:
<div id="content">
<h1>This is a title</h1>
<p>This is a paragraph.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</div>
此时,我们希望提取的内容是标题、段落和列表中的项目。我们可以使用以下正则表达式:
<div id="content">.*?</div>
这个正则表达式将匹配<div id="content">
和</div>
之间的所有内容。
为了提取标题,我们可以使用以下正则表达式:
<h1>(.*?)</h1>
这个正则表达式将匹配<h1>
和</h1>
之间的所有内容。
为了提取段落,我们可以使用以下正则表达式:
<p>(.*?)</p>
这个正则表达式将匹配<p>
和</p>
之间的所有内容。
为了提取列表中的项目,我们可以使用以下正则表达式:
<li>(.*?)</li>
这个正则表达式将匹配<li>
和</li>
之间的所有内容。
现在,我们已经知道了如何使用正则表达式提取标题、段落和列表中的项目。下一步,我们将学习如何使用正则表达式保存数据。
在python中,我们可以使用re
模块来保存数据。re
模块提供了许多函数,可以帮助我们完成正则表达式匹配和数据提取的任务。
例如,我们可以使用re.findall()
函数来提取标题、段落和列表中的项目:
import re
html = """
<div id="content">
<h1>This is a title</h1>
<p>This is a paragraph.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</div>
"""
# 提取标题
title = re.findall(r'<h1>(.*?)</h1>', html)
# 提取段落
paragraphs = re.findall(r'<p>(.*?)</p>', html)
# 提取列表中的项目
items = re.findall(r'<li>(.*?)</li>', html)
# 打印提取到的数据
print(title)
print(paragraphs)
print(items)
输出结果如下:
['This is a title']
['This is a paragraph.']
['Item 1', 'Item 2', 'Item 3']
我们可以看到,我们已经成功地提取到了标题、段落和列表中的项目。
现在,我们已经学习了如何使用正则表达式提取和保存数据。在接下来的文章中,我们将学习如何使用正则表达式完成更复杂的任务。