如何使用 Python 抓取段落?

pythonserver side programmingprogramming

可以使用 Python 的 Beautiful Soup 库抓取段落。BeautifulSoup 是一个 Python 库,可让我们轻松解析 HTML 和 XML 文档。它提供了一种方便的方式来导航和搜索解析的数据,使其成为 Web 抓取任务的理想选择。通过利用其强大的功能,我们可以从网页中提取特定元素,例如段落。在本文中,我们将使用 Python 的 Beautiful Soup 库抓取段落。

安装所需的库

在抓取段落之前,我们需要安装必要的库。打开终端或命令提示符并运行以下命令来安装 BeautifulSoup 和请求(用于发出 HTTP 请求的库):

pip install beautifulsoup4 request

从网站抓取段落

我们将从 openAI 网站抓取段落开始。我们将使用请求库来获取页面的 HTML 内容,然后使用 BeautifulSoup 来解析和提取所需的段落。

算法

  • 导入必要的库:请求和 BeautifulSoup。

  • 定义要抓取的网站的 URL。

  • 使用 request.get() 函数向网站发送 GET 请求并存储响应。

  • 使用 BeautifulSoup 解析 HTML 内容,方法是创建一个 BeautifulSoup 对象,其中包含响应文本和指定为"html.parser"的解析器类型。

  • 使用 BeautifulSoup 对象的 find_all() 方法查找页面上的所有段落元素,并将"p"作为参数传递。

  • 遍历段落并使用文本打印其文本属性。

示例

import 请求
from bs4 import BeautifulSoup

# 要抓取的网站 URL
url = "https://openai.com/"

# 向网站发送 GET 请求
response = request.get(url)

# 使用 BeautifulSoup 解析 HTML 内容
soup = BeautifulSoup(response.text, "html.parser")

# 查找所有段落元素
paragraphs = soup.find_all("p")

# 遍历段落并打印其文本
for 段落 in 段落:
    print(paragraph.text)

输出

我们创建安全且有益的人工智能的工作需要深入了解潜在的风险和利益,并仔细考虑影响。
我们研究生成模型以及如何使它们与人类价值观保持一致。
我们的 API 平台提供最新的模型和安全最佳实践指南。
开发安全且有益的 AI 需要来自广泛学科和背景的人才。
我鼓励我的团队不断学习。不同主题或领域的想法通常可以激发新的想法并拓宽潜在的解决方案空间。

处理不同的 HTML 结构

网页可以具有不同的 HTML 结构,段落可能位于各种标签或类属性内。为了处理这种情况,我们可以相应地修改代码。

示例

让我们考虑一个段落包含在具有特定类的 <div> 标签中的示例。在此示例中,我们在 html 变量中定义 HTML 结构。我们通过传递 HTML 内容并将解析器指定为"html.parser"来创建一个 BeautifulSoup 对象 soup。然后我们使用 soup.find() 来定位类名为"content"的父元素。接下来,我们使用 find_all() 来查找父元素内的所有段落元素。

最后,我们遍历段落并打印其文本。

from bs4 import BeautifulSoup

html = '''
<html>
  <body>
    <div class="content">
      <h1>Website Title</h1>
      <p>This is the first paragraph.</p>
      <div class="inner-div">
        <p>This is the second paragraph.</p>
      </div>
      <p>This is the third paragraph.</p>
    </div>
  </body>
</html>
'''

soup = BeautifulSoup(html, "html.parser")

# 查找包含段落的父元素
parent_element = soup.find("div", class_="content")

# 查找父元素内的所有段落元素
paragraphs = parent_element.find_all("p")

for passage in passages:
    print(paragraph.text)

输出

This is the first paragraph.
This is the second paragraph.
This is the third paragraph.

处理嵌套元素

有时,网页内的段落可能具有嵌套元素,例如链接、图像或跨度。如果我们只想提取段落的纯文本,我们可以使用 BeautifulSoup 提供的 get_text() 方法。

示例

让我们考虑一个例子,其中我们在代码本身中定义了一个 HTML 结构,并且我们需要提取包含嵌套元素(如链接)的段落。

在下面的例子中,我们在 HTML 变量中定义一个 HTML 结构。我们通过传递 HTML 内容并将解析器指定为"html.parser"来创建一个 BeautifulSoup 对象 soup。然后我们使用 soup.find() 来定位类名为"content"的父元素。接下来,我们使用 find_all() 查找父元素内的所有段落元素。

对于每个段落,我们使用 get_text() 仅提取纯文本,不包括任何嵌套元素(如链接)。最后,我们打印提取的文本。

from bs4 import BeautifulSoup

html = '''
<html>
  <body>
    <div class="content">
      <h1>Website Title</h1>
      <p>This is the first paragraph.</p>
      <p>This is the second paragraph with a <a href="https://example.com">link</a> in it.</p>
      <p>This is the third paragraph.</p>
    </div>
  </body>
</html>
'''

soup = BeautifulSoup(html, "html.parser")

# 查找包含段落的父元素
parent_element = soup.find("div", class_="content")

# 查找父元素内的所有段落元素
paragraphs = parent_element.find_all("p")

for passage in passages:
    # 仅提取纯文本,不包括任何嵌套元素
    text = paragraph.get_text()
    print(text)

输出

This is the first paragraph.
This is the second paragraph with a link in it.
This is the third paragraph.

结论

在本文中,我们讨论了如何在不同场景中使用 Python 从 HTML 页面抓取段落。我们还探讨了处理不同 HTML 结构和从 HTML 中提取段落时处理嵌套元素等场景。我们现在可以应用网页抓取技术从网站收集有价值的信息,用于分析、研究或其他目的。


相关文章


有用资源