当前位置: 首页 > news >正文

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,一起讨论网页解析和爬虫实现思路。

http://www.cnnetsun.cn/news/26644.html

相关文章:

  • 云服务器的核心优势
  • 15. PPML - 隐私保护机器学习综述 - 《Towards Efficient Privacy-Preserving Machine Learning: A Systematic Review》
  • Qwen3-14B-AWQ:重新定义轻量化大模型效率标准
  • Linux环境下的C语言编程(三十九)
  • 毕业设计实战:基于SSM+MySQL的图书商城管理系统设计与实现,从需求到测试全流程拆解,新手也能轻松通关!
  • 毕业设计实战:基于Java+MySQL的校园二手书交易平台设计与实现,从需求到上线全流程避坑指南!
  • 毕业设计实战:基于SSM+MySQL的问卷调查系统,避开这些坑轻松搞定毕设!
  • 非正弦反电动势下PMSM与BLDC无感控制算法研究:自适应谐波估计降低转矩脉动
  • 单相并网逆变器Matlab仿真:离网仿真与PLL锁相环研究,电感电流谐波含量THD优化仿真效果
  • Kate 高级文本编辑器 v26.03.70 官方中文版
  • yadm 完整使用指南:从入门到精通掌握点文件管理
  • 基于Web的大学生体测管理系统设计与实现中期(1)
  • 代码随想录算法训练营第四十三天 | 98. 所有可达路径
  • GBase 8a数据库集群硬件部署安装建议
  • GBase数据库护航国家管网SCADA系统四年无中断平稳运行
  • 一文搞定 AI 智能体架构设计的9大核心技术
  • 计算机毕业设计springboot基于JAVA的校园图书馆管理系统的设计与实现 基于Spring Boot框架的校园图书馆信息化管理系统开发与应用研究 利用Spring Boot与Java技术构建的高
  • 数据结构==LRU Cache ==
  • AMD ROCm平台上的YOLOv8目标检测:从入门到精通的5步优化指南
  • 如何让GPT-5.2成为你职场上的得力助手?这5大功能必看!
  • 如何快速掌握YOLOv12:实时目标检测的完整实践指南
  • PINNs-Torch:用PyTorch轻松实现物理信息神经网络
  • JavaScript学习笔记:5.函数
  • Apache Kvrocks数据库部署实战:从零到一的完整搭建教程
  • 16、远程系统管理与安全防护指南
  • 施耐德BMENOC0321C:高性能模块化驱动控制器(增强通信版)
  • 金融人转AI:从入门到上手,我的“证书认证+技能”学习路线分享
  • 模块化多电平变换器MMC(20子模块、21电平,工作条件220kV(AC)/400kV(DC)...
  • 生态共舞!恭喜10家企业荣获“2025龙蜥社区最佳联合解决方案奖”
  • Java常见开发框架大比拼:Jeesite 、jeecgBoot、smartAdmin、ruoyi