news 2026/5/26 22:14:42

100 天学会爬虫 · Day 9:CSS Selector 是什么?和 XPath 该怎么选?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
100 天学会爬虫 · Day 9:CSS Selector 是什么?和 XPath 该怎么选?

在前一天我们学习了XPath,它是爬虫中非常强大的解析工具。
但你在实际开发或阅读别人代码时,可能还会经常看到另一种写法:

soup.select(".article-title")

这就是CSS Selector(CSS 选择器)

那么问题来了:

  • CSS Selector 是什么?

  • 和 XPath 有什么区别?

  • 爬虫中到底该用哪一个?

今天这一篇,我们就把CSS Selector + XPath 的关系一次讲清楚

🔍 一、什么是 CSS Selector?

CSS Selector 本来是前端用来给 HTML元素加样式的规则,例如:

.title { color: red; }

后来爬虫工具(如 BeautifulSoup)复用了这套规则,用来定位 HTML 节点

在爬虫中,CSS Selector 的作用是:

通过 class、id、标签、层级关系,快速定位网页元素

🧠 二、为什么爬虫也能用 CSS Selector?

因为 HTML 的结构本身就是为 CSS 服务的:

<h1 class="title">文章标题</h1>

前端用 CSS:

h1.title

爬虫用 CSS Selector:

soup.select("h1.title")

规则是完全一致的,只是用途不同。


🧰 三、使用 CSS Selector 的前提

CSS Selector 一般配合BeautifulSoup使用。

安装:pip install beautifulsoup4

基本用法:

from bs4 import BeautifulSoup soup = BeautifulSoup(html, "lxml") elements = soup.select("你的 CSS Selector")

返回值是一个列表


🧪 四、CSS Selector 最常用的 8 种写法(爬虫必会)

① 按标签选择

h1 div a
soup.select("h1")

② 按 class 选择(最常用)

.title .article-item
soup.select(".title")

③ 按 id 选择

#content
soup.select("#content")

④ 标签 + class 组合

h1.title div.article
soup.select("h1.title")

⑤ 层级关系(子元素)

ul li a
soup.select("ul li a")

⑥ 直接子元素(>)

ul > li

⑦ 获取属性(BeautifulSoup 用法)

link = soup.select_one("a") href = link["href"]

⑧ 获取文本内容

text = soup.select_one("h1").get_text(strip=True)

🔎 五、实战示例:用 CSS Selector 解析文章页面

HTML 结构如下:

<div class="article"> <h1 class="title">Python 爬虫入门</h1> <p class="desc">这是文章简介</p> </div>

CSS Selector 提取:

title = soup.select_one(".title").text desc = soup.select_one(".desc").text

非常直观,新手极易上手


⚔️ 六、CSS Selector vs XPath(核心对比)

这是很多爬虫新手最关心的问题。

对比点CSS SelectorXPath
学习成本
可读性很强较强
语法复杂度简单较复杂
表达能力中等非常强
多条件组合一般非常强
向上查找父节点不支持支持
提取文本/属性需要额外代码原生支持
工程级复杂解析不适合非常适合

🧠 七、爬虫中到底该怎么选?

我给你一个非常实用的经验法则

✅ 优先用 CSS Selector 的场景

  • 页面结构简单

  • class / id 非常清晰

  • 文章页、列表页

  • Demo / 教学 / 小项目

  • 新手阶段

✅ 必须用 XPath 的场景

  • HTML 层级复杂

  • 需要多条件过滤

  • 需要向上/向兄弟节点查找

  • 列表结构不固定

  • 工程级爬虫

  • 高稳定性要求

📌一句话总结:

简单页面用 CSS,复杂页面用 XPath。


🚨 八、CSS Selector 的常见坑(新手易踩)


❌ 1. class 是多个值,却当成单值用

<div class="item active">

你写:

.item.active

是对的
但写成:

[class="item"]
❌ 2. select 返回的是列表,却当成单个对象
soup.select(".item").text # ❌

正确写法:

soup.select_one(".item").text

或遍历列表。


❌ 3. 页面内容其实是 Ajax 加载的

HTML 中没有数据,CSS Selector 自然解析不到。


🧩 九、CSS Selector + XPath 如何配合使用?

在真实项目中,很多工程师会:

  • 先用 CSS Selector 快速定位

  • 遇到复杂结构再换 XPath

这并不冲突,而是互补。

你掌握两种方式,才算真正具备 HTML 解析能力。


✅ 总结

今天你系统掌握了:

  • CSS Selector 是什么

  • BeautifulSoup 中如何使用 CSS Selector

  • CSS Selector 常用写法

  • CSS Selector 与 XPath 的核心区别

  • 不同场景下的选择策略

  • 新手常见错误与避坑

从今天开始,你在解析 HTML 时,就不再只有一种思路,而是能灵活选择最合适的工具

如果你在解析页面时遇到:

  • XPath 写得很复杂

  • CSS Selector 不知道怎么写

  • 页面结构不固定

  • 列表节点经常变化

  • 解析结果不稳定

可以加我微信:cpseagogo,一起讨论网页解析和爬虫实现思路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 5:10:40

《UNIX高级环境编程》 第七章 进程环境 读书笔记

一、main函数 C程序总是从main函数开始执行&#xff0c;main函数的原型是&#xff1a; int main(int argc,char *argv[]); 正如前面提到的&#xff0c;argc是命令行参数的数目&#xff0c;argv是指向个参数的指针组成的数组。 当内核执行C程序时&#xff0c;在调用main前先调用…

作者头像 李华
网站建设 2026/5/27 12:57:08

锂电池保护板mos越多越好吗

锂电池保护板中的MOS管并非越多越好&#xff0c;这是一个典型的"边际效益递减"工程问题。MOS管数量需根据电池容量、放电电流、成本预算和空间限制科学配置&#xff0c;盲目堆砌反而可能降低可靠性。一、MOS管在保护板中的核心作用MOS管是保护IC指令的 "肌肉执行…

作者头像 李华
网站建设 2026/5/25 19:58:39

Windows系统文件sxs.dll缺失损坏问题 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/26 18:43:23

Windows系统文件tdh.dll缺失找不到情况 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/27 13:34:33

10分钟从零搭建Art Design Pro:Vue 3后台管理系统的完整配置手册

10分钟从零搭建Art Design Pro&#xff1a;Vue 3后台管理系统的完整配置手册 【免费下载链接】art-design-pro 这是一个基于 Vue3、TypeScript、Vite 和 Element-Plus 精心打造的后台管理系统模板&#xff0c;专注于用户体验和视觉设计。 项目地址: https://gitcode.com/GitH…

作者头像 李华