为什么我得到“列表索引超出范围”?

时间:2020-06-04 03:15:37

标签: python web-scraping beautifulsoup

我对Python还是很陌生,我有一个Python函数,该函数应该从Wikipedia页面(https://en.wikipedia.org/wiki/List_of_largest_cities_of_U.S._states_and_territories_by_population)获取HTML,出于这个问题的目的,请在第一栏中获取HTML。在每一行中。我正在使用Python和BeautifulSoup4。

def getStates():
page = requests.get("https://en.wikipedia.org/wiki/List_of_largest_cities_of_U.S._states_and_territories_by_population")
soup = BeautifulSoup(page.text, "html.parser")

table = soup.find("tbody") 
rows = table.findAll("tr")

for row in rows:
    columns = row.findAll("td")
    print(columns[0])

“ columns”变量应该是一个列表,我知道这是因为:

  1. print(columns)给了我多个HTML列表(由于for循环),用方括号和逗号括起来。

  2. print(len(columns))返回“ 9”,表示每行有9列,可以通过计算Wikipedia页面中的列来确认。

  3. findAll()函数返回一个列表,如BS4文档中所示:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all

但是,如果我执行print(columns[0])或任何索引,则会出现以下错误:IndexError: list index out of range。因此,有人可以告诉我有关我做错了什么吗?我觉得我在这里犯了一个明显的错误,但是尝试搜索此问题并没有产生任何结果。

1 个答案:

答案 0 :(得分:0)

我有一个列表列表,但正如@juanpa.arrivillaga 所说,我没有意识到第一个列表(在索引 0 中)是空的。