1. XPath 入门:为什么每个爬虫工程师都需要掌握它
第一次接触XPath是在2015年,当时我需要从几百个结构混乱的HTML页面中提取产品数据。正则表达式让我抓狂,BeautifulSoup的选择器也不够精准。直到同事推荐了XPath,我才发现原来元素定位可以如此优雅高效。
XPath全称XML Path Language,最初是为XML文档设计的查询语言,但由于HTML是XML的子集,它同样适用于网页抓取。与CSS选择器相比,XPath的最大优势在于:
- 可以向上查找父节点(CSS无法逆向查找)
- 支持更复杂的条件判断(如按文本内容、属性值范围筛选)
- 路径表达式更接近文件系统的直观性
举个真实案例:上周我需要抓取某电商网站限时促销的商品价格,但发现价格元素没有固定class,而是动态生成的。通过XPath的contains()函数,我写出了这样的表达式:
xpath复制//div[contains(@class, "price-box")]//span[contains(text(), "¥")]
这个表达式意思是:查找所有class属性包含"price-box"的div,在其后代中找到包含"¥"符号的span元素。这种灵活性是其他选择器难以企及的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. XPath 核心语法全解析
2.1 基础路径表达式
XPath的路径表达式分为两种:
- 绝对路径:从根节点开始的完整路径,如
/html/body/div[2]/main/section - 相对路径:从当前节点开始的路径,如
//div[@class="content"]
实际开发中,我强烈建议使用相对路径。原因有三:
- 绝对路径过于脆弱,页面结构微调就会失效
- 相对路径可读性更好
- Chrome开发者工具默认生成的也是相对路径
常用轴(axis)说明:
child::子节点(可省略)parent::父节点ancestor::所有祖先节点descendant::所有后代节点following-sibling::后续同级节点
2.2 高级定位技巧
属性定位进阶:
xpath复制//input[@type="text" and @name="usernam
