1. 网页抓取的本质与核心要素
当你第一次尝试用Python写爬虫时,往往会陷入一个误区——把注意力全部放在代码编写上,却忽略了最基础的问题:我们到底要从网页中提取什么?这个看似简单的问题,实际上决定了整个爬虫项目的成败。
我在2015年接手一个电商价格监控项目时,就犯过这样的错误。当时我花了三天时间写出了一个"完美"的爬虫,能稳定抓取目标网站的所有HTML内容。但当我开始分析数据时才发现,我根本不知道哪些标签对应商品名称,哪些class是价格信息。最终这个"完美"爬虫只能抓回一堆无法使用的原始HTML,项目不得不推倒重来。
1.1 网页数据的结构化特征
现代网页本质上是一个由HTML标签构成的树形结构文档,就像一本书的目录体系:
code复制html
├── head
│ ├── title
│ └── meta
└── body
├── div(class="header")
├── div(class="content")
│ ├── h1
│ ├── p
│ └── ul
└── div(class="footer")
我们抓取数据的关键,就是要在这个树形结构中找到目标数据所在的"树枝"和"树叶"。以电商网站为例:
- 商品标题通常位于
<h1>或<div class="product-title">中 - 价格信息可能藏在
<span class="price">里 - 商品详情则分散在多个
<p>或<div>标签中
1.2 三种主流定位方式对比
定位网页元素主要有三种技术路线,它们各有优劣:
| 定位方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| HTML标签 | 简单页面 | 直接易用 | 缺乏灵活性 |
| CSS选择器 | 现代网页 | 语法简洁 | 对动态内容支持有限 |
| XPath | 复杂结构 | 功能强大 | 学习曲线陡峭 |
我在实际项目中通常会这样选择:
- 快速原型开发用CSS选择器
- 复杂页面解析用XPath
- 老式静态页面可能直接用HTML标签
提示:不要拘泥于单一技术,优秀的爬虫工程师应该根据页面特点灵活组合使用这些定位方式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. HTML标签定位:最基础的方法
2.1 理解HTML文档结构
让我们从一个真实的网页片段开始:
html复制<div id="product">
<h1 class="title">Python编程从入门到实践</h1>
<p class="author">作者:Eric Matthes</p>
<div class="price-section">
<span class="original-price">¥89.00</span>
<span class="discount-price">¥59.90</span>
</div>
</div>
在这个结构中:
<div id="product">是容器元素<h1>包含书名- 第一个
<p>是作者信息 price-section下的两个<span>分别是原价和折扣价
2.2 使用BeautifulSoup进行基础定位
BeautifulSoup是最常用的HTML解析库,它的基础定位方法非常简单:
python复制from bs4 import BeautifulSoup
import requests
url = "http://examp
