返回

剖析python爬虫实践的细节:学习正则表达式应对数据保存的细节

后端

在昨日的文章中,我们解决了绝大多数的正则表达式问题。但目前还存在一个问题,那就是当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']

我们可以看到,我们已经成功地提取到了标题、段落和列表中的项目。

现在,我们已经学习了如何使用正则表达式提取和保存数据。在接下来的文章中,我们将学习如何使用正则表达式完成更复杂的任务。