到达列表末尾时“IndexError:列表索引超出范围”

时间:2016-12-15 18:13:29

标签: python web-scraping beautifulsoup

我从网页上的表中提取了一些数据,并将其放入列表中。但是,当我到达列表的末尾时,我得到一个“IndexError:list index out of range”错误,我不知道如何解决它。

from bs4 import BeautifulSoup
import urllib2

soup = BeautifulSoup(urllib2.urlopen("https://www.countyofdane.com/election/electiondetail.aspx?id=54").read())
table = soup.find("table", {"id":"gdvPrecinctDetail101"})

a = table.findAll("td")
slipstr = list(a)
data_list = []

for t in slipstr:
    t = str(t)
    new_t = t[4:-5]
    data_list.append(new_t)

x = 0
y = 9
for yes in data_list:
    if yes < len(data_list):
        break
    else:
        print data_list[x] + ": ",
        for data_point in data_list[x+1:y]:
            print data_point,
        print "\n"
        x += 9
        y += 9

错误讯息:

print data_list[x] + ": ",
IndexError: list index out of range

谢谢!

编辑:每行(丹麦县城市)有9列(候选)数据,因此,为什么x和y在循环中每次旅行增加9。

2 个答案:

答案 0 :(得分:0)

我认为您需要将循环的中断条件更改为:

if x > len(data_list)-1:
    break

答案 1 :(得分:0)

虽然已经回答了有关索引错误的问题,但如果您没有首先展平表结构,则甚至不会出现此问题。

通过将元素转换为HTML源片段来“提取”单元格的文本值,然后在开头剪切,最后是一个丑陋的黑客,它有一些问题,比如打印“&amp;”in “C VERONA WDS 1&amp; 5“as”&amp;“。

使用表格结构并通过text属性获取文本内容,代码可能如下所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
import urllib2
from bs4 import BeautifulSoup


def main():
    url = 'https://www.countyofdane.com/election/electiondetail.aspx?id=54'
    soup = BeautifulSoup(urllib2.urlopen(url).read(), 'lxml')
    rows = soup.find('table', id='gdvPrecinctDetail101').find('tbody')('tr')
    for row in rows:
        row_data = [td.text for td in row('td')]
        print(u'{0}: {1}'.format(row_data[0], ' '.join(row_data[1:])))


if __name__ == '__main__':
    main()
相关问题