电脑之家
柔彩主题三 · 更轻盈的阅读体验

XPath提取网页数据的几个实用脚本技巧

发布时间:2026-03-23 04:30:56 阅读:8 次

平时想批量抓个天气预报、商品价格或者新闻标题,手动复制太费劲?其实用几行网络脚本配合XPath,分分钟搞定。关键不是装多牛的工具,而是找准节点、写对表达式。

先搞懂XPath长啥样

比如网页里有这样一段HTML:

<div class="item"><h3 class="title">iPhone 15 Pro</h3><span class="price">¥7999</span></div>
想取价格,XPath可以写成 //span[@class='price']/text();想取标题,就用 //h3[@class='title']/text()。注意:双引号得用单引号包着,不然脚本容易报错。

Python里跑起来最顺手

装个 lxmlrequests 就够:

import requests
from lxml import html

url = 'https://example.com'
res = requests.get(url)
tree = html.fromstring(res.content)
prices = tree.xpath('//span[@class="price"]/text()')
print(prices)
如果页面用了JavaScript动态加载,requests拿不到完整内容,那就换 playwrightselenium 先渲染再提取。

绕开常见坑

有些网站class名带随机字符串,比如 class="price_abc123",这时候别死磕class,试试父级定位://div[contains(@class, "item")]/span/text();或者用文本特征匹配://span[contains(text(), "¥")]/text()。还有时候XPath明明对了却返回空——八成是网页有iframe,得先进iframe文档再查。

浏览器里直接试,不写代码也行

打开Chrome开发者工具(F12),在Console里粘贴:

$x('//h2[@class="post-title"]/a/text()')
回车就能看到匹配到的所有标题文字。边调边改,比写完再跑快多了。

实际用的时候,别一上来就写复杂表达式。先用浏览器复制一个简单XPath,再一点点加条件,比如从 //a//div[@id="list"]//a[@href],稳一点,少踩坑。