迭代列表项时索引超出范围错误

时间:2019-08-20 15:48:47

标签: python web-scraping beautifulsoup python-requests indexoutofrangeexception

import requests
from bs4 import BeautifulSoup
page=requests.get('https://www.foxsports.com/golf/golfers?association=1&teamId=0&season=2019&position=0&page=1’)
soup = BeautifulSoup(page.text, 'html.parser’)
player_name_list = soup.find(class_= 'wisbb_players’)
player_name_list_items = player_name_list.findAll('a’)
for player_name in player_name_list_items:
    names = player_name.contents[1]
    print(names.text)

我不能在内容中使用0。在打印出一个长长的空白后,它会在屏幕底部打印出几个数字,我想这是名称列表应该在的地方。

在此网站上,每个名称都有2个span标签。我一直试图让它只打印一个名字已经有一段时间了,而当我终于做到这一点时,它给了我一个错误。我不知道该说些什么。我已经尝试将其发布约30分钟。如果这篇文章有问题,请告诉我。我只是想在这里提出我的问题。

2 个答案:

答案 0 :(得分:0)

由于player_name_list_items中的最后四个元素不是玩家名称,因此出现错误。因此,如果您选中player_name.contents,则只会得到['2'],因为此列表只有一个元素,当它尝试执行player_name.contents[1]时,您会收到超出范围的错误。要绕过它,您可以使用if语句:

尝试一下:

for player_name in player_name_list_items:
    if player_name.span:
        print(player_name.span.text)
    else:
        print('Not a name')

输出:

Adamonis, Brad
Adams, Frank
Albertson, Anders
Allan, Stephen
Allenby, James
Allenby, Robert
Alverio, Max
An, Byeong Hun
Ancer, Abraham
Anderson, Mark
Anderson, Matthew
Anguiano, Mark
Aphibarnrat, Kiradech
Appleby, Stuart
Arendell, Connor
Armour, Ryan
Armstrong, Dawson
Arnaus, Adri
Asaji, Yosuke
Ashun, Wu
Atwal, Arjun
Augenstein, John
Axley, Eric
Baddeley, Aaron
Bae, Sang-Moon
Not a name
Not a name
Not a name
Not a name

答案 1 :(得分:0)

更正您的选择器,使其仅检索第一个子跨度,即出现第一个玩家姓名

<tr>