如何从特定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)
代码解释
- 修正元素匹配:原代码中
find_all的class参数写法错误,改用class_参数才能正确定位目标字段。 - 清理冗余内容:先移除开头的排名标记
1.,再删除无关的积分和问号15?。 - 拆分格式化字段:将数字统计部分拆分为胜、平、负、进球、失球字段,连续的
WWWWW拆分为单个状态字段。 - 状态字符替换:按需求将
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
相关产品推荐
相关产品推荐

