Ошибка при обращении к элементу списка
При попытке присвоить в переменную данные из элемента списка получаю ошибку IndexError: list index out of range. Ошибка в функции get_content()
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\abracadabra\irbis.py", line 28, in <module> main()
File "C:\Users\Admin\Desktop\abracadabra\irbis.py", line 25, in main get_content(get_html(url))
File "C:\Users\Admin\Desktop\abracadabra\irbis.py", line 16, in get_content name = td_list[0]
IndexError: list index out of range
Вывожу принтом тип данных - список длинной в 4 элемента,а при обращении по индексу ошибка. В чем может быть проблема ?
# парсер товаров с xxx
import requests
from bs4 import BeautifulSoup as bs
def get_html(url):
r = requests.get(url)
return r.text
def get_content(html):
soup = bs(html, 'lxml')
trcont = soup.findAll('tr')
for tr in trcont:
td_list = [t.text for t in tr.findAll('td')] # чтобы обратиться к каждому элементу cоздал список
print(type(td_list))
print(len(td_list))
name = td_list[0]
description = td_list[1]
proizvoditel = td_list[2]
def main():
url = 'xxx'
get_content(get_html(url))
if __name__ == '__main__':
main()
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Нужно проверять результат поиска элементов. У вас в td_list пустой список.
Скорее всего, у вас первый <tr> имеет <th>, поэтому поиск <td> не был успешным.
Сделайте так:
def get_content(html):
soup = bs(html, 'lxml')
trcont = soup.findAll('tr')
for tr in trcont:
td_list = [t.text for t in tr.findAll('td')]
# Если список пустой, пропускаем обработку текущего <tr>
if not td_list:
continue
print(type(td_list))
print(len(td_list))
name = td_list[0]
description = td_list[1]
proizvoditel = td_list[2]