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

使用lxml抓取阿森纳队页面球员URL失败:返回空列表求助

解决阿森纳球员URL抓取的问题

嗨,我来帮你搞定这个爬虫问题!你的代码返回空列表主要有两个核心问题:导入语句错误,以及XPath路径太依赖固定DOM层级,很容易失效。咱们一步步来修正:

1. 先修正导入错误

你原代码里的导入语句语法不对,正确的导入应该是这样:

from urllib.request import urlopen
import lxml.etree as etree

2. 重构XPath路径(关键!)

原XPath写得太冗长且绑定了固定的div层级(比如div[2]/div[5]),一旦网页布局微调,这个路径就彻底找不到元素了。而且很多时候浏览器会自动给表格补全<tbody>标签,但实际返回的HTML里可能并没有这个标签,这也会导致定位失败。

我们改用更稳健的定位方式:直接定位球员所在的表格,以及包含球员链接的<a>标签。比如找带有squad-table类的表格,然后提取里面球员列的链接:

3. 完整可运行代码

from urllib.request import urlopen
import lxml.etree as etree

url = "https://www.espn.com/soccer/team/squad/_/id/359/arsenal"
# 获取页面HTML内容
response = urlopen(url)
html_content = response.read()

# 解析HTML
tree = etree.HTML(html_content)

# 用稳健的XPath提取所有球员的链接标签
player_links = tree.xpath("//table[contains(@class, 'squad-table')]//td[contains(@class, 'player')]/a")

# 提取每个链接的href并拼接成完整URL
player_urls = []
for link in player_links:
    href = link.get("href")
    full_url = f"https://www.espn.com{href}"
    player_urls.append(full_url)

# 打印结果
for url in player_urls:
    print(url)

为什么这样能行?

  • 用contains(@class, 'squad-table')定位表格,避免依赖固定的完整类名或者DOM层级
  • 直接找球员列(td[contains(@class, 'player')])里的<a>标签,这是球员链接的固定位置,不会轻易变化
  • 拼接相对路径为完整URL,方便后续使用

如果运行后还是没结果,可能是页面有动态加载(比如滚动加载更多球员),这时候你可能需要用selenium这类工具来模拟浏览器渲染,但目前这个页面的球员列表是静态加载的,上面的代码应该能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:16:08