Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代列表项时索引超出范围错误_Python_Web Scraping_Beautifulsoup_Python Requests_Indexoutofrangeexception - Fatal编程技术网

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

Python 迭代列表项时索引超出范围错误,python,web-scraping,beautifulsoup,python-requests,indexoutofrangeexception,Python,Web Scraping,Beautifulsoup,Python Requests,Indexoutofrangeexception,我无法在内容中使用0。在打印出一个长长的空白后,它在屏幕底部打印出几个数字,我想这就是名字列表应该在的地方 在这个网站上,每个名字都有两个span标签。我一直试图让它只打印一个名字有相当长的一段时间,当我最终得到它,它给了我一个错误。我不知道还能说什么。我已经试着贴了30分钟了。如果这篇文章有什么不对劲,请告诉我。我只是想在这里提出我的问题。您遇到了一个错误,因为player\u name\u list\u items中的最后四个元素不是player name。因此,如果您选中player\u

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


在这个网站上,每个名字都有两个span标签。我一直试图让它只打印一个名字有相当长的一段时间,当我最终得到它,它给了我一个错误。我不知道还能说什么。我已经试着贴了30分钟了。如果这篇文章有什么不对劲,请告诉我。我只是想在这里提出我的问题。

您遇到了一个错误,因为
player\u name\u list\u items
中的最后四个元素不是player name。因此,如果您选中
player\u name.contents
您将只得到
['2']
,因为此列表有一个元素,当它尝试执行
player\u name.contents[1]
时,您将得到一个超出范围的错误。要绕过该选项,可以使用
if
语句:

试试这个:

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)
输出:

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
导入请求
从bs4导入BeautifulSoup作为bs
r=请求。获取('https://www.foxsports.com/golf/golfers?association=1&teamId=0&season=2019&position=0&page=1')
汤=bs(r.含量,'lxml')
#bs4.7.1+
players=[i.text代表汤中的i.select('.wisbb_fullPlayer>span:first child')]
#或<4.7.1
players=[汤中i的i.text。选择('.wisbb_fullPlayer>span:n类型(1)]]
打印(玩家)

这将在-->1 players=[i.text for i in soup.select('.wisbb\u fullPlayer>span:first child')]中为我提供此NotImplementedError回溯(最近一次调用last)]NotImplementedError:仅实现了以下伪类:第n类。需要bs4.7.1+。值得升级,因为它支持功能,而且我认为更准确。如果您不想升级,请使用:players=[I.text for I in soup.select('.wisbb_fullPlayer>span:nth of type(1)]]
import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.foxsports.com/golf/golfers?association=1&teamId=0&season=2019&position=0&page=1')
soup = bs(r.content, 'lxml')
#bs4 4.7.1 +
players = [i.text for i in soup.select('.wisbb_fullPlayer > span:first-child')]
#or < 4.7.1
players = [i.text for i in soup.select('.wisbb_fullPlayer > span:nth-of-type(1)')]
print(players)