CodeGym /课程 /Python SELF ZH /使用 CSS 选择器查找网页中的元素

使用 CSS 选择器查找网页中的元素

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

1. 回顾 CSS 选择器

欢迎来到我们的世界,这里 HTML 页面不会随便就揭示它的秘密,而需要通过精准的 CSS 选择器。如果你认为 CSS 选择器只用于页面的样式设计(像是让你的网站看起来不那么像乱涂乱画的笔记本),是时候打开你作为爬虫开发者的第三只眼了。今天我们会讲解如何让 CSS 选择器成为你搜寻和提取数据的最爱工具。

CSS 选择器,就像是具象化的甜言蜜语,可以让我们轻松访问到 HTML 元素。它帮助你确定页面上需要操作的元素。如果 HTML 页面是个迷宫,那么 CSS 选择器就是那根帮助你找到出口的红线。

CSS 选择器示例

  • 标签选择器: p — 选择所有 <p> 元素(段落)。
  • 类选择器: .classname — 选择所有指定类名的元素。
  • ID 选择器: #idname — 选择指定 ID 的元素。
  • 组合选择器: div > p — 选择所有作为 <div> 直接子元素的 <p> 元素。

2. 在 BeautifulSoup 中使用选择器

再见了,没有 CSS 选择器的枯燥生活!现在该更新升级了。假设你碰到一个网站,你必须提取其中所有伟大智者的名言,好在面试时炫一把。为此,我们将使用 select() 方法,它正好与 CSS 选择器配合使用。

select()select_one() 方法

select() 方法会返回所有与选择器匹配的元素列表。而 select_one() 会找到与选择器匹配的第一个元素,就像搜索引擎直接返回你真正需要的,而不是一堆毫无意义的链接。

假设你有一个包含名言的 HTML 页面:

HTML

<div class="quote">
    <h2 class="author">普希金</h2>
    <p class="text">哎呀普希金。</p>
    <a href="https://example.com" class="link">阅读更多</a>
</div>
<div class="quote">
    <h2 class="author">列宁</h2>
    <p class="text">学习,学习,再学习。</p>
    <a href="https://example.com" class="link">阅读更多</a>
</div>
<div class="quote">
    <h2 class="author">斯大林</h2>
    <p class="text">有了人就有了问题,没有人就没有问题。</p>
    <a href="https://example.com" class="link">阅读更多</a>
</div>

我们可以这样获取这些名言:

Python

from bs4 import BeautifulSoup
import requests

# 获取页面的 HTML 代码
response = requests.get('http://quotes.toscrape.com/')
soup = BeautifulSoup(response.text, 'html.parser')

# 使用 CSS 选择器找到所有名言
quotes = soup.select('.quote')

for quote in quotes:
    text = quote.select_one('.text').get_text()
    author = quote.select_one('.author').get_text()
    print(f'名言: {text}\\n作者: {author}\\n')

是不是有点魔法的感觉?类名 .quote 帮助我们获取所有标记为名言的元素,而 .text.author 是它们的子元素,可用来提取名言内容和作者。

3. 使用 CSS 选择器的搜索示例

我们来通过一些示例练习,以便你的大脑知道如何应对带有十个类名的 div。使用选择器可以更有针对性地在页面上搜索数据。你可以将它们组合起来,以获得确切的内容。

基于类和标签的选择器

Python

# 从菜单块中查找所有链接
menu_links = soup.select('nav.menu a')

for link in menu_links:
    print(link['href'])

基于 ID 的选择器

Python

# 提取页面的主要标题
main_heading = soup.select_one('#main-heading')
print(main_heading.text)

组合选择器

Python

# 查找突出显示部分中的所有段落
highlighted_sentences = soup.select('.highlighted p')

for sentence in highlighted_sentences:
    print(sentence.text)

4. 错误及避免方式

作为爬虫开发者,你的工作并不总是像喝杯咖啡那么简单。有时 CSS 选择器可能会失效,比如:

  • 页面具有动态内容,所需的元素通过 JavaScript 加载。
  • 你访问了一个不存在的选择器(例如类名或 ID 拼错了)。
  • HTML 结构发生变化,仿佛你进入了一部寻找目标元素的恐怖片。

为了避免这些问题,请确保你操作的是最新的、静态的 HTML 文档,并查看选择器的正确性。

实际应用

现在你可以将 CSS 选择器用于实际的数据提取项目了。这个技能在创建价格分析工具、获取新闻甚至追踪网站变化时都很实用。最重要的是,即使网站因为 CSS 改变了外观,由于代码依赖的是 HTML 结构而非样式设计,它依然可以正常工作。

1
任务
Python SELF ZH, 第 31 级, 课程 4
已锁定
CSS选择器基础操作
CSS选择器基础操作
2
任务
Python SELF ZH, 第 31 级, 课程 4
已锁定
提取元素列表
提取元素列表
3
任务
Python SELF ZH, 第 31 级, 课程 4
已锁定
综合搜索 HTML 元素
综合搜索 HTML 元素
4
任务
Python SELF ZH, 第 31 级, 课程 4
已锁定
设计一个用于价格分析的网页爬虫
设计一个用于价格分析的网页爬虫
1
调查/小测验
认识 BeautifulSoup第 31 级,课程 4
不可用
认识 BeautifulSoup
认识 BeautifulSoup
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION