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

使用Selenium/BeautifulSoup4抓取Flashscore平台Ajax球队特定数据的技术问询

解决方案

1. 修正代码并提取Ajax数据(排除"?")

首先你的代码里有几处小问题:比如content_list3 = content.find_all(...)里的content应该是content3,而且你定位的是带?的图标元素,不是整行的积分榜数据。我们需要定位每行的ui-table__row元素,再筛选出包含"Ajax"的那一行,同时移除所有?符号。

下面是修正后的代码,会提取Ajax的完整数据并保存为列表:

from selenium import webdriver
from bs4 import BeautifulSoup as BS
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.flashscore.pl/druzyna/ajax/8UOvIwnb/tabela/")
sleep(10)  # 等待页面加载完成,也可以用WebDriverWait优化
page = driver.page_source
soup = BS(page,'html.parser')

# 获取积分榜的所有行
table_body = soup.find('div', {'class':'ui-table__body'})
all_rows = table_body.find_all('div', {'class':'ui-table__row'})

ajax_data_list = []
for row in all_rows:
    row_text = row.text.strip()
    # 筛选出包含Ajax的行
    if "Ajax" in row_text:
        # 移除所有"?"符号
        cleaned_text = row_text.replace("?", "")
        # 拆分数据:按文本结构拆分各个字段
        rank_end = cleaned_text.find("Ajax")
        rank = cleaned_text[:rank_end].replace(".", "")
        team = "Ajax"
        # 拆分场次、胜、平、负
        rest = cleaned_text[rank_end+4:]
        matches = rest[:2]
        wins = rest[2:4]
        draws = rest[4:5]
        losses = rest[5:6]
        # 拆分进球失球
        goal_split_idx = rest.find(":") + 2
        goals = rest[6:goal_split_idx]
        # 拆分积分和最近战绩
        points = rest[goal_split_idx:goal_split_idx+2]
        recent = rest[goal_split_idx+2:]
        # 组装成列表
        ajax_data_list = [rank, team, matches, wins, draws, losses, goals, points, recent]
        break  # 找到Ajax后直接退出循环

driver.quit()
print("提取的Ajax数据列表:", ajax_data_list)

运行后会得到类似这样的列表:['2', 'Ajax', '18', '13', '3', '2', '56:4', '42', 'WWPWW'],已经完全移除了?符号。

2. 将数据用";"分隔成指定格式

拿到上面的列表后,只需要用Python的字符串join方法就能快速生成你要的格式:

# 生成分号分隔的字符串
formatted_data = ";".join(ajax_data_list)
print("格式化后的输出:", formatted_data)

运行后会输出:2;Ajax;18;13;3;2;56:4;42;WWPWW,如果不需要排名,直接从列表里移除第一个元素再执行join即可。

额外优化建议

  • 用WebDriverWait替代sleep,更可靠地等待页面加载,避免网络波动导致的元素未找到问题:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get("https://www.flashscore.pl/druzyna/ajax/8UOvIwnb/tabela/")
    # 等待积分榜主体加载完成,最多等待15秒
    WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.CLASS_NAME, "ui-table__body"))
    )
    page = driver.page_source
    
  • 如果要导出到CSV文件,可以直接用Python内置的csv模块:
    import csv
    
    with open('ajax_stats.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f, delimiter=';')
        writer.writerow(ajax_data_list)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:42:41