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

从ResultSet中提取特定赛事数据的技术实现问询

解决方案

不需要把ResultSet里的td和th分开处理,直接遍历整个结果集,通过状态标记来抓取目标区间的th数据就行,以下是具体实现思路和代码示例:

核心逻辑

  • 初始化一个状态标记(比如in_target_section),初始为False
  • 遍历ResultSet中的每个元素:
    1. 如果当前元素是td,检查文本是否包含目标子串(如"MLB"):
      • 包含的话,把状态标记设为True,跳过当前td
      • 如果状态已经是True(说明遇到了下一个td),直接终止遍历
    2. 如果当前元素是th,且状态标记为True,就把这个th的内容存入结果列表

代码示例(以BeautifulSoup的ResultSet为例)

from bs4 import BeautifulSoup

# 模拟爬取得到的页面内容与ResultSet
sample_html = """
<table>
  <tr><td>NBA</td></tr>
  <tr><th>10:00 湖人vs勇士</th></tr>
  <tr><th>11:30 快船vs太阳</th></tr>
  <tr><td>MLB</td></tr>
  <tr><th>09:00 红袜vs洋基</th></tr>
  <tr><th>12:00 道奇vs巨人</th></tr>
  <tr><td>NFL</td></tr>
  <tr><th>14:00 爱国者vs牛仔</th></tr>
</table>
"""
soup = BeautifulSoup(sample_html, 'html.parser')
result_set = soup.find_all(['td', 'th'])  # 得到包含td和th的ResultSet

target_keyword = "MLB"
target_th_data = []
in_target_section = False

for elem in result_set:
    if elem.name == 'td':
        if target_keyword in elem.get_text(strip=True):
            in_target_section = True
        elif in_target_section:
            # 遇到下一个分类td,停止抓取
            break
    elif elem.name == 'th' and in_target_section:
        target_th_data.append(elem.get_text(strip=True))

print(target_th_data)
# 输出: ['09:00 红袜vs洋基', '12:00 道奇vs巨人']

注意事项

  • 如果页面存在多个含目标子串的td,去掉break逻辑,改为切换状态即可抓取多段数据
  • 用get_text(strip=True)能去除文本里的多余空格和换行,让数据更整洁
  • 确保ResultSet是按页面文档顺序排列的(BeautifulSoup的find_all默认就是按顺序返回)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:13