You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XPath在HTML节点内选择多类关联节点并提取信息?

解决XPath提取多字段无法关联的问题

你遇到的问题很典型——直接全局抓取所有href和所有Date内容,得到的是两个独立的列表,自然没法保证它们的顺序和对应关系。正确的思路是先定位到每个<li>父节点,再在每个节点内部提取对应的字段,这样就能确保每一组数据都来自同一个<li>。

具体实现方法

核心是用相对路径(开头加.)来限定搜索范围在当前<li>内部,步骤如下:

  1. 先获取所有<li>节点的集合:
    //li
    
  2. 对每个<li>节点,分别执行相对路径的查询:
    • 提取当前<li>内的href:
      .//a[@class="Title"]/@href
      
    • 提取当前<li>内的Date文本:
      .//p[@class="Date"]/text()
      

代码示例(以Python Scrapy为例)

# 遍历每个<li>节点
for li in response.xpath('//li'):
    # 从当前<li>内取href
    item_href = li.xpath('.//a[@class="Title"]/@href').get()
    # 从当前<li>内取Date内容
    item_date = li.xpath('.//p[@class="Date"]/text()').get()
    # 处理或者存储这组关联数据
    print(f"关联数据:链接={item_href},状态={item_date}")

备选方案:单XPath返回组合结果

如果你想用单个XPath表达式直接返回成对的结果,可以用concat把两个字段拼接起来(需要注意分隔符不要和内容冲突):

//li/concat(.//a[@class="Title"]/@href, '---', .//p[@class="Date"]/text())

这个表达式会返回类似http://www.google.com---Status: Under development的字符串,之后你可以按分隔符拆分得到关联的两个字段。不过这种方式不如遍历父节点灵活,适合简单场景。

关键提醒

一定要记得在相对路径前加.!如果不加.,XPath会从根节点重新全局搜索,又会回到你之前的问题——拿到的是所有href和所有Date的无关联列表。

内容的提问来源于stack exchange,提问作者Niclas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:18:33