CodeGym /课程 /Python SELF ZH /使用 BeautifulSoup 提取信息

使用 BeautifulSoup 提取信息

Python SELF ZH
第 31 级 , 课程 1
可用

如果你觉得网页只是一些好看的图片和文字,那我要告诉你一个消息:网页就像洋葱——有很多层,当你发现可以提取那么多数据时,会让你感动得想哭(当然是开心的泪水)。今天我们会使用 BeautifulSoup 挖掘 HTML 页面。准备好你的“虚拟铲子”,让我们开始挖掘吧!

1. 分析 HTML 文档

简单的网页

让我们分析一些简单的 HTML 文档,看看它们由哪些部分组成,以及哪些元素是我们提取数据时值得注意的。

新闻页面的例子:

HTML

<html>
  <head>
    <title>新闻</title>
  </head>
  <body>
    <h1>今日头条</h1>
    <p>今天发生了一件大事!</p>
  </body>
</html>

在这个例子里,h1 包含文章标题,而 p 包含正文内容。

HTML 结构对数据抓取的影响

在使用 BeautifulSoup 之前,了解你想要解析的 HTML 文档的结构非常重要。 这能帮助我们确定哪些页面部分包含所需的数据。 比如,如果你需要找页面标题,可以关注 <h1>, 而提取列表时,可以使用 <ul><li>

抓取前的准备工作

开始提取数据之前,必须先找到关键的标签和属性。 比如,如果网页开发者在页面中用 class="headline" 属性标记标题内容,这将对你非常有帮助。 使用浏览器的开发工具,右键点击元素并选择 "Inspect"(在 Google Chrome 中)来研究 HTML 结构。

2. 安装和配置库

安装 BeautifulSoup 和 requests

为了处理 HTML,我们会用到 BeautifulSoup 库。 而为了加载 HTML 页面,我们需要 requests。安装过程很简单,只需要在控制台执行几条命令:

Bash

pip install beautifulsoup4 requests

结合 requests 和 BeautifulSoup 使用

Requests 可以帮助我们向网页请求 HTML 内容,而 BeautifulSoup 能解析这些内容。下面是实践中的例子:

Python

import requests
from bs4 import BeautifulSoup

# 加载页面
url = 'https://example.com'
response = requests.get(url)

# 使用 BeautifulSoup 解析页面
soup = BeautifulSoup(response.text, 'html.parser')

# 提取页面标题
title = soup.title.text
print('标题:', title)

3. 通过标签导航和提取数据

导航方法

现在我们已经有了 HTML 文档,可以通过 BeautifulSoup 导航其中。 超棒的 .select() 方法允许我们使用 CSS 选择器提取数据。

通过标签提取数据

BeautifulSoup 提供了一些方法,比如 findfind_all,用来根据标签找到元素。 它们帮助你找到想要的数据碎片:

Python

# 找到第一个段落
paragraph = soup.find('p').text
print('第一个段落:', paragraph)

# 找到所有列表项
list_items = soup.find_all('li')
for item in list_items:
    print('列表项:', item.text)

使用属性进行过滤

某些情况下,需要提取符合特定条件的元素,比如拥有某个 class 的元素。 BeautifulSoup 提供了简单的方法:

Python

# 提取拥有特定 class 的元素
headline = soup.find('h1', class_='main-headline').text
print('标题:', headline)

4. 使用 CSS 选择器

什么是 CSS 选择器?

CSS 选择器是 Python 开发者的超级工具,允许我们根据特定条件提取数据。 它们能用来找到具有共同样式的元素,令数据抓取更灵活、更精准。

BeautifulSoup 中使用选择器

BeautifulSoup 通过 select 方法支持 CSS 选择器。比如:

Python

# 查找所有链接
links = soup.select('a')
for link in links:
    print('链接:', link['href'])

你甚至可以组合选择器进行更精准的查询。 比如,soup.select('div.article h2') 会选中所有 div 中的 h2,且 div 拥有 article 类。

使用 CSS 选择器进行查找的示例

实践一下我们的技能,提取所有带有 highlight 类的段落并打印它们的内容:

Python

# 提取所有带 'highlight' 类的段落
highlighted_paragraphs = soup.select('p.highlight')
for para in highlighted_paragraphs:
    print('高亮段落:', para.text)

今天先到这里,在下一次见面前别忘了多多练习你的抓取技能。祝你在解析的世界里玩得开心!

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION