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

如何使用LXML提取指定XPath路径下a标签的href属性值

lxml提取a标签href属性实现方法

核心修改逻辑

XPath末尾的/text()作用是提取标签内部文本,提取标签属性有两种标准写法:

  • 直接通过XPath返回属性值:将路径末尾的/text()替换为/@href,XPath执行后直接返回对应href属性的字符串列表
  • 先定位元素再取属性:先通过XPath拿到a标签的元素对象,再调用元素自带的.get('href')方法提取属性值,适合需要同时获取文本、多个属性的场景

修正后可运行代码

import requests
from lxml import html

boxScore = "CHA/CHA202206200"
url = "https://www.baseball-reference.com/boxes/" + boxScore + ".shtml"
page = requests.get(url)
# 保留原有的移除注释逻辑,适配站点用注释包裹表格的反爬规则
tree = html.fromstring(b''.join(line for line in page.content.splitlines() if b'<!--' not in line and b'-->' not in line))
getTeams = tree.xpath('//*[@class="scorebox"]/div/div/strong/a/text()')
for team in getTeams:
    team = team.replace(" ", "")
    stringy = '"all_' + team + 'pitching"'
    # 核心调整:把末尾的/text()替换为/@href直接提取href属性
    stringx = '//*[@id=' + stringy + ']/div/table/tbody/tr/th/a/@href'

player_hrefs = tree.xpath(stringx)
print(player_hrefs)

运行后即可返回所有对应投手的个人页路径,你提到的目标值/players/b/berrijo01.shtml会包含在返回结果中。

扩展场景:如果需要同时获取球员姓名和对应链接,可以先定位a标签元素再分别取值,示例写法:

# 先定位所有目标a标签元素
a_tags = tree.xpath('//*[@id="all_TorontoBlueJayspitching"]/div/table/tbody/tr/th/a')
for tag in a_tags:
    player_name = tag.text
    player_href = tag.get('href')
    print(player_name, player_href)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:27:32