2016-12-15 3 views
0

Я вытащил некоторые данные из таблицы на веб-странице и поместил ее в список. Однако, когда я дойду до конца списка, я получаю ошибку «IndexError: list index out the range», и я не уверен, как ее исправить. Сообщение«IndexError: индекс индекса вне диапазона» при достижении конца списка

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

Я думаю, что вы должны изменить состояние разрыва петли в:

if x > len(data_list)-1: 
    break 
+0

Я все еще получаю такое же сообщение об ошибке, и что интересно, я попытался изменить последнюю часть после «len (data_list)» на «-10» и «-100», и он все равно выдал такое же сообщение об ошибке. Я думаю, что я сделал что-то неправильно раньше в коде, но все равно не уверен. – kfish15

+0

Я проверил код с этой настройкой, и он больше не дает индексной ошибки. Он печатает эти строки: «T ALBION WDS 1-2: 369 732 1 11 0 0 0 3» до «C VERONA WDS 6-9: 1248 2178 4 33 0 0 10 2». Вы изменили «да» на x? –

+0

Получил, спасибо! – kfish15

0

Хотя вопрос об ошибке индекса уже ответил, эта проблема woudn't даже возникнуть, если вы не сплющить в первую очередь.

«Извлечение» текстового значения ячейки путем преобразования элемента в фрагмент источника HTML, а затем разрезать его в начале, а в конце - уродливый хак, который имеет некоторые проблемы, такие как печать «&» в "C VERONA WDS 1 & 5" как "&".

Использование структуры таблицы и получение на содержание текста с помощью атрибута 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() 
Смежные вопросы