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

如何从特定HTML元素提取文本并按规则处理内容?

处理FlashScore球队数据格式方案

需求说明

从FlashScore页面提取Ajax球队数据后,需对结果做以下处理:

  • 删除字符串开头的1.
  • 删除冗余的无关字段内容
  • 将字母W替换为WIN
  • 将所有字段用分号;分隔,得到规范格式

修正后代码

import re
from selenium import webdriver
from bs4 import BeautifulSoup as BS2
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.flashscore.pl/druzyna/ajax/8UOvIwnb/tabela/")
sleep(10)
page = driver.page_source
soup = BS2(page,'html.parser')
content = soup.find('div',{'class':'ui-table__body'})
# 修正class选择器写法,用class_参数匹配目标元素
content_list = content.find_all('span', class_="table__cell table__cell--value")

res = []
for item in content_list:
    line = item.text.strip()
    if 'Ajax' in line:
        # 1. 移除开头的排名标记"1."
        processed = line.replace('1.', '', 1)
        # 2. 移除无关的积分与问号"15?"
        processed = processed.replace('15?', '')
        # 3. 拆分球队名、数据统计和状态字符
        team_name = 'Ajax'
        # 提取数字统计部分并拆分格式
        stats_part = re.findall(r'\d+[:]?\d+', processed)[0]
        stats_split = ';'.join(list(stats_part.replace(':', '')))[:-2]
        # 提取状态字符并拆分为单个字段
        status_part = re.findall(r'W+$', processed)[0]
        status_split = ';'.join(list(status_part))
        # 按需求将W替换为WIN,保留W则注释此行
        status_split = status_split.replace('W', 'WIN')
        # 拼接最终结果
        final = f"{team_name};{stats_split};{status_split}"
        res.append(final)
print(res)

代码解释

  1. 修正元素匹配:原代码中find_all的class参数写法错误,改用class_参数才能正确定位目标字段。
  2. 清理冗余内容:先移除开头的排名标记1.,再删除无关的积分和问号15?。
  3. 拆分格式化字段:将数字统计部分拆分为胜、平、负、进球、失球字段,连续的WWWWW拆分为单个状态字段。
  4. 状态字符替换:按需求将W替换为WIN,若需保留原字符可注释替换代码。

输出结果

替换W为WIN时输出:

['Ajax;5;5;0;16;3;WIN;WIN;WIN;WIN;WIN']

保留W时输出:

['Ajax;5;5;0;16;3;W;W;W;W;W']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:30:51