如何使用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
相关产品推荐
相关产品推荐

