2016-12-19 2 views
0

Я пытаюсь разобрать все Мир Warcraft игрока, на моем сервере с Wowprogress и BeautifulSoup с этим кодомСинтаксический стол с BeautifulSoup (индекс вне диапазона)

from urllib.request import urlopen 
import os 

    adresse="http://www.wowprogress.com/gearscore/eu/hyjal/char_rating/next/0#char_rating" 

page=urlopen(adresse) 

from bs4 import BeautifulSoup 
soup=BeautifulSoup(page) 

# print (soup.prettify) 
all_tables=soup.find_all("table") 

bonne_table=soup.find("table",class_="rating ") 

place_liste=[] 
pseudo=[] 
guilde=[] 
ilevel=[] 

for row in bonne_table.findAll("tr"): 
    cells = row.findAll("td") 
    print(cells) 
    place_liste.append(cells[0].find(text=True)) 
    pseudo.append(cells[1].find(text=True)) 
    guilde.append(cells[2].find(text=True)) 
    ilevel.append(cells[3].find(text=True)) 

print(pseudo) 
print(guilde) 
print(ilevel) 

os.system("pause") 

И я получаю сообщение об ошибке

place_liste.append(cells[0].find(text=True)) 
IndexError: list index out of range" 

И я не понимаю ==> В строке есть 4 элемента, но это дало мне эту ошибку. Я явно не понимаю, почему он говорит, что это вне пределов досягаемости.

+0

Вы вид, предполагая заранее, что там -will- быть 4 'клетки. Как вы уверены в этом? – rrd

ответ

0

В первой строке нет <td>. Вместо этого он имеет заголовок <th>.

Реализация условной проверки

if len(cells) >= 4: 
+0

Спасибо, что работает отлично, но может ли он создать проблему, если td пуст (как игрок без гильдии)? – alliocha1805

+0

Нет ... не в вашем фрагменте кода. – pacholik