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

英超官网球员图片爬取求助:获取完整球员姓名及图片链接

问题分析

你的问题核心在于两点:

  1. 目标页面是动态渲染页面,初始HTTP请求仅返回前10条球员数据,更多内容需要滚动页面触发AJAX加载,requests无法执行JavaScript,因此拿不到完整数据。
  2. 球员图片采用懒加载机制,真实图片链接存储在data-src属性中,直接提取src只能拿到占位图(即显示"player missing"的图片)。

Python 解决方案

使用selenium模拟浏览器行为,实现滚动加载所有球员数据,并提取正确的图片链接:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time

# 初始化Chrome浏览器(需提前安装ChromeDriver并配置环境变量)
driver = webdriver.Chrome()
driver.get("https://www.premierleague.com/players")

# 自动关闭Cookie弹窗(若存在)
try:
    accept_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))
    )
    accept_btn.click()
except:
    pass  # 无弹窗则跳过

# 循环滚动页面,加载所有球员数据
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)  # 等待页面加载
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break  # 页面高度不再变化,说明加载完成
    last_height = new_height

# 提取球员姓名与图片链接
player_rows = driver.find_elements(By.CSS_SELECTOR, "tr.player")
player_data = []
for row in player_rows:
    name = row.find_element(By.CSS_SELECTOR, "td.playerName > a").text
    img_elem = row.find_element(By.CSS_SELECTOR, "td.playerPhoto img")
    img_url = img_elem.get_attribute("data-src")
    player_data.append({"姓名": name, "图片链接": img_url})

# 转为DataFrame并输出
df = pd.DataFrame(player_data)
print(df)

# 关闭浏览器
driver.quit()

代码说明

  • 用selenium处理JavaScript渲染的动态内容,模拟真实用户的滚动操作
  • 从data-src属性提取真实图片链接,解决"player missing"的问题
  • 自动处理Cookie弹窗,避免后续操作被拦截

R 解决方案

使用RSelenium模拟浏览器行为,结合rvest解析页面数据:

library(RSelenium)
library(rvest)
library(dplyr)

# 启动Chrome浏览器
rD <- rsDriver(browser = "chrome", port = 4567L)
remDr <- rD[["client"]]
remDr$navigate("https://www.premierleague.com/players")

# 处理Cookie弹窗
tryCatch({
  accept_btn <- remDr$findElement(using = "id", value = "onetrust-accept-btn-handler")
  accept_btn$clickElement()
}, error = function(e) {})

# 滚动加载所有球员
last_height <- as.numeric(remDr$executeScript("return document.body.scrollHeight")[[1]])
while(TRUE) {
  remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
  Sys.sleep(3)
  new_height <- as.numeric(remDr$executeScript("return document.body.scrollHeight")[[1]])
  if(new_height == last_height) break
  last_height <- new_height
}

# 解析页面并提取数据
page_source <- remDr$getPageSource()[[1]]
soup <- read_html(page_source)

players_df <- soup %>%
  html_elements("tr.player") %>%
  purrr::map_dfr(function(row) {
    name <- row %>% html_element("td.playerName > a") %>% html_text()
    img_url <- row %>% html_element("td.playerPhoto img") %>% html_attr("data-src")
    tibble(姓名 = name, 图片链接 = img_url)
  })

print(players_df)

# 关闭浏览器
remDr$close()
rD[["server"]]$stop()

注意事项
  • Python环境需安装依赖:pip install selenium pandas,并匹配对应浏览器的驱动(如ChromeDriver)
  • R环境需安装依赖:install.packages(c("RSelenium", "rvest", "dplyr")),同样需要配置浏览器驱动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:41:22