我从网页上的表中提取了一些数据,并将其放入列表中。但是,当我到达列表的末尾时,我得到一个“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。答案 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()