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

XPath提取href包裹文本求助:从维基MLS页面提取教练姓名

解决XPath提取href包裹文本的问题

你的问题核心是XPath路径匹配错误,导致拿不到目标文本。直接给你修正方案和原因说明:

问题根源

  1. 维基百科这个目标表格的原始HTML里没有<tbody>标签,你写的//tbody会让整个路径匹配失败(tbody是浏览器渲染时自动补的,lxml解析原始HTML时不会生成这个标签)
  2. 目标文本"Gonzalo Pineda"是嵌套在<a>标签里的,直接取td[2]/text()只能拿到td里的空白换行,拿不到a标签内的有效文本

修正后的代码方案

方案1:精准定位a标签取文本

这个方法直接匹配目标文本所在的a标签:

import requests
from lxml import html

t = requests.get("https://en.wikipedia.org/wiki/2022_Major_League_Soccer_season")
dom_tree = html.fromstring(t.content)
# 去掉tbody,直接定位第二个wikitable下的tr,再取td[2]内a标签的文本
coach = dom_tree.xpath('//table[contains(@class, "wikitable")][2]//tr/td[2]/a/text()')
# 取第一个结果(Gonzalo Pineda是该列第一个条目)
print(coach[0])  # 输出 Gonzalo Pineda

方案2:提取td下的所有文本(更鲁棒)

如果担心a标签结构变化,用normalize-space()提取td下的所有文本并自动去除空白:

import requests
from lxml import html

t = requests.get("https://en.wikipedia.org/wiki/2022_Major_League_Soccer_season")
dom_tree = html.fromstring(t.content)
# 直接提取目标td的所有文本,自动处理换行和空格
coach = dom_tree.xpath('normalize-space(//table[contains(@class, "wikitable")][2]//tr[2]/td[2])')
print(coach)  # 输出 Gonzalo Pineda

补充说明

你之前加a[contains(@href, "wiki")]返回空列表,也是因为路径里多了tbody,导致整个XPath找不到任何匹配元素,去掉tbody就能正常匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:01:11