在没有类的情况下在 BeautifulSoup 中获取第一个(或特定的)td

我有一张噩梦表,没有为 tr 和 td 标签提供类。

示例页面如下:https ://system.gotsport.com/org_event/events/1271/schedules?age=19&gender=m

(您将在下面的代码中看到我得到了多个页面,但这不是问题。)

我想要每个括号中的团队名称(没有其他名称)。输出应该是:

OCYS
FL Rush
杰克逊维尔 FC
亚特兰大联
SSA
迈阿密拉什 肯德尔 SC
IMG
坦帕湾联

我已经能够获取指定表中的每个td 。但是每次尝试[0]获取td每一行的第一行都会给我一个“索引超出范围”错误。

代码是:

import requests

import csv 

from bs4 import BeautifulSoup


batch_size = 2

urls = ['https://system.gotsport.com/org_event/events/1271/schedules?age=19&gender=m', 'https://system.gotsport.com/org_event/events/1271/schedules?age=17&gender=m']


# iterate through urls

for url in urls:

    response = requests.get(url)

    soup = BeautifulSoup(response.content, "html.parser")




# iterate through leagues and teams

    leagues = soup.find_all('table', class_='table table-bordered table-hover table-condensed')

    for league in leagues:

        row = ''

        rows = league.find_all('tr')

        for row in rows:

            team = row.find_all('td')

            teamName = team[0].text.strip()    

            print(teamName)

经过几个小时的工作后,我觉得只需更改一个语法即可实现这一目标。是的?


杨魅力
浏览 129回答 3
3回答

波斯汪

您可以使用 CSS 选择器nth-of-type(n)。它适用于两个链接:import requestsfrom bs4 import BeautifulSoupurl = "https://system.gotsport.com/org_event/events/1271/schedules?age=19&gender=m"soup = BeautifulSoup(requests.get(url).content, "html.parser")for tag in soup.select(".small-margin-bottom td:nth-of-type(1)"):    print(tag.text.strip())输出:OCYSFL RushJacksonville FCAtlanta UnitedSSA......Real Salt Lake U19Real ColoradoEmpire United Soccer Academy

慕田峪4524236

每个括号对应一个“面板”,每个面板有两行,第一行包含比赛表中所有球队的第一个表。def main():    import requests    from bs4 import BeautifulSoup    url = "https://system.gotsport.com/org_event/events/1271/schedules?age=19&gender=m"    response = requests.get(url)    response.raise_for_status()        soup = BeautifulSoup(response.content, "html.parser")    for panel in soup.find_all("div", {"class": "panel-body"}):        for row in panel.find("tbody").find_all("tr"):            print(row.find("td").text.strip())        return 0if __name__ == "__main__":    import sys    sys.exit(main())输出:OCYSFL RushJacksonville FCAtlanta UnitedSSAMiami Rush Kendall SCIMGTampa Bay UnitedWeston FCChargers SCSouth Florida FASolar SCRISE SC...

炎炎设计

我认为问题出在表的标题上,它包含th元素而不是td元素。当您尝试从空列表中检索第一个元素时,它会导致范围索引错误。尝试添加长度检查td:for row in rows:    team = row.find_all('td')    if(len(team) > 0):        teamName = team[0].text.strip()            print(teamName)它应该打印出团队名称。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python