【问题标题】:Python: How do I scrape ESPN for game matchupsPython:我如何抓取 ESPN 的比赛对决
【发布时间】:2026-02-15 12:00:02
【问题描述】:

对于编程来说还很陌生,道歉是一个广泛的问题。

import requests
from bs4 import BeautifulSoup

def data():
    League = ['nba', 'nfl', 'mlb']
    url = f"http://www.espn.com/{League[0]}/schedule"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    date = soup.find('h2',{'class':'table-caption'})
    return date.string

这是我目前所拥有的,但我想做的就是抓取今天的比赛,结果如下:

>>> 'Los Angeles Lakers at Charlotte Bobcats 7:00PM'
>>> 'Boston Celtics at Detroit Pistons 7:00PM'

我看到所有信息都在其中,但我不知道如何遍历行,以及在数据不是专门作为字符串时提取数据。我知道这是广泛的,并且有很多要求。提前道歉!

【问题讨论】:

  • 了解 XPath 和使用 Web 开发工具,例如Firebug for Firefox 了解如何查找和处理网站上的特定数据。
  • XPath 是否比请求更好?还是我可以定制更多?
  • XPath 是一种处理 HTML 网页特定项目的方法。这可能会有所帮助,但取决于复杂性soup.find 可能就足够了。

标签: python python-3.x loops iterator


【解决方案1】:

我认为 SO 社区有时对初学者过于苛刻。

这是一种查找表格结果并提取主客场球队名称的方法:

for row in soup.select("table.schedule tbody tr"):
    home_team, away_team = row.select(".team-name")

    print(home_team.get_text(), away_team.get_text())

这里的想法是使用CSS selector 来定位表行,遍历每一行并使用team-name 类获取两个元素。


总体而言,想出这样的东西的过程相对简单:

  • 在浏览器开发者工具中检查所需元素
  • 想想你可以用什么来找到这个元素 - 唯一标识这个元素的东西(例如,看看那个超级显式的 team-name 类)
  • 编写(在本例中)Python/BeautifulSoup 代码以尝试定位此元素
  • 重复直到工作

这只是高水平,但希望它有所帮助。

【讨论】:

  • 非常感谢!一个简单的问题,我怎样才能让 for 循环在当天结束时停止迭代,所以它只得到那些日子的游戏?
  • @DG.Finance 当然,如果我理解正确,table.schedule tbody tr 需要调整为仅查看第一个表。
  • 很抱歉无法为您的答案投票,看起来 SO 不会让我这样做。我查看了元素,但找不到任何明显独特的东西来调整该建议,我做错了什么吗?
  • @DG.Finance 我认为如果您将其循环为for row in soup.select_one("table.schedule").select("tbody tr"):,它应该可以工作。
最近更新 更多