开发者社区> 问答> 正文

如何获取表的所有行,而不仅仅是第一行?

社区下午好!我需要编写解析器的帮助,我才刚刚开始使用Python 3编程,也许我缺少了一些东西。任务是这样的:该站点有一个包含橄榄球队的表,使用Requests和BeautifulSoup,我能够将此表的源代码转换为firsttable变量,print命令通常显示我需要的所有数据,但是当我尝试将其显示在以下形式的列表中:

10:00 Team 1 Team 2
11:00 Team 3 Team 4
12:00 Team 5 Team 6

依此类推,我只能从列表中获取第一个值,我尝试使用While循环(例如,当i <10时),它向我重复表中的第一个值10次,但不解析剩下的。我究竟做错了什么?

def get_data(html):
    soup = BeautifulSoup(html, 'lxml')
    firsttable = soup.findAll('table', class_='predictionsTable')[0]
    print(firsttable) #Here, all the data that I need is displayed in the console as html source

    for scrap in firsttable:

        try:
            hometeam = scrap.find('td', class_='COL-3').text
        except:
            hometeam = 'Hometeam Error'

        try:
            awayteam = scrap.find('td', class_='COL-5').text
        except:
            awayteam = 'Away Team Error'

        try:
            btts = scrap.find('td', class_='COL-10').text
        except:
            btts = 'BTTS Score Error'

        datenow = str(datetime.date.today())

        print(datenow,hometeam,awayteam,btts)

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 09:44:51 363 0
1 条回答
写回答
取消 提交回答
  • firsttable中的scrap循环`仅有整个表内容的一个迭代,这就是为什么只找到第一行的原因。我不推荐使用循环,而是推荐使用find_all方法。这为我工作:

    url = 'https://www.over25tips.com/both-teams-to-score-tips/'
    soup = BeautifulSoup(requests.get(url).content, 'lxml')
    
    firsttable = soup.findAll('table', class_='predictionsTable')[0]
    hometeams = [x.text for x in firsttable.find_all('td', {'class': 'COL-3 right-align'})]
    awayteams = [x.text for x in firsttable.find_all('td', {'class': 'COL-5 left-align'})]
    btts = [x.text for x in firsttable.find_all('td', {'class': 'COL-10 hide-on-small-only'})]
    datenow = str(datetime.date.today())
    
    for i in range(len(hometeams)):
        print(datenow, hometeams[i], awayteams[i], btts[i])
    

    回答来源:stackoverflow

    2020-03-24 09:45:00
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载