Python爬取OLX广告页面时XPath获取下一页链接返回空数组的求助
定位失效的核心原因
- 基础语法错误:当前XPath写法中使用了大写的
Div标签,lxml解析XPath时对标签名大小写严格匹配,而页面实际的分页容器标签是小写的div,写法不匹配会直接导致返回空数组。 - 类名逻辑失效:OLX采用CSS-in-JS的样式生成方案,
sc-hmzhuo、inUUEM这类类名是构建阶段随机生成的哈希值,会随版本更新、页面加载动态变化,写死全类名做精确匹配的逻辑无法长期稳定命中目标节点,和之前参考的电商教程分页DOM结构不兼容。
可落地的修复方案
- 先修正基础语法:将XPath中的大写
Div替换为小写div,排除基础书写错误。 - 替换类名匹配逻辑,放弃全类名精确匹配,改用稳定特征定位节点:
- 用
contains()方法匹配类名中固定不变的片段,避开随机生成的哈希类名:# 定位类名包含分页容器特征的节点,再筛选指向后续页面的链接 next_page = h.xpath('//div[contains(@class, "pagination")]//a[contains(text(), "Next")]/@href') - 优先匹配带固定语义的节点属性,这类属性不受动态样式类名变化影响:
# 匹配标注了翻页语义的链接,稳定性远高于类名匹配 next_page = h.xpath('//a[contains(@aria-label, "Next page")]/@href')
- 用
- 调试注意事项:编写XPath时逐层缩小定位范围,每完成一层定位就打印返回值确认命中状态,不要直接照搬旧教程中的固定类名规则,这类动态类名的生命周期通常只有几天到几周。
内容的提问来源于stack exchange,提问作者Cleber Marques
相关产品推荐
相关产品推荐

