Добрый день! При попытке парсить таблицу на сайте с помощью BeatifulSoup натолкнулся на непонятную проблему: удается получить список полей таблицы, но не получается обратиться к элементам по индексу, возникает ошибка
"IndexError: list index out of range". Подозреваю, что это может быть как-то связано с тем, что BeatifulSoup выдает результаты поиска не в виде обычного
list, а в виде
bs4.element.resultset, хотя пишут, что действия с последним такие же, как со списком.
Как получить значения элементов этого списка по индексу?
(частично использован код из
этого вопроса)
import requests
from bs4 import BeautifulSoup as BS
def test_2():
url = 'https://actual-phlebology.ru/afpatient-metki/'
response = requests.get(url)
soup = BS(response.text, features = 'html.parser')
rows = soup.find('table', class_ = 'tcont countLines').find_all('tr') # Ищем в html тег 'table'
for row in rows: # Проходимся по всем строкам. При каждой итерации в row у нас будет следующая строка таблицы вместе с html тегами.
cells = row.find_all('td') # Ищем в текущей строке таблицы все теги 'td'. В html td - это тег ячейки.
tag_list = [cell.text for cell in cells]
print(tag_list, len(tag_list), type(tag_list))
# print(tag_list, tag_list[0], len(tag_list), type(tag_list)) # здесь возникает ошибка, независимо от индекса
Часть вывода в консоль, если запускать в исходном виде:
['', 'Нужно ли пить флеботоники при тромбозе глубоких вен?', '✓', '✓', 'https://actual-phlebology.ru/afpatient/nuzhno-li-pit-flebotoniki-pri-tromboze-glubokih-ven/', 'тромбы\n\n\nлекарства от варикоза\n\n\nпопулярные вопросы\n\n\nмифы о варикозе'] 6 <class 'list'>
['', 'Как болят артерии и вены? Подходы к лечению', '✓', '✓', 'https://actual-phlebology.ru/afpatient/kak-bolyat-arterii-i-veny-podhody-k-lecheniyu/', 'болезни сосудов\n\n\nболи в ногах'] 6 <class 'list'>
['', 'Профессиональные отеки нижних конечностей и методы их коррекции', '✓', '✓', 'https://actual-phlebology.ru/afpatient/professionalnye-oteki-nizhnih-konechnostey-i-metody-ih-korrektsii/', 'профилактика\n\n\nотеки'] 6 <class 'list'>
['', 'Как справиться с венозной болью?', '✓', '✓', 'https://actual-phlebology.ru/afpatient/kak-spravitsya-s-venoznoy-bolyu/', 'популярные вопросы\n\n\nболи в ногах\n\n\nлечение варикоза без операции'] 6 <class 'list'>
Вывод в консоль, если закомментировать 1-й print и раскомментировать 2-й:
Traceback (most recent call last):
File "d:\Distrib\Mine\Python\AF_PatientBot\to_have_in_mind.py", line 222, in <module>
test_2()
File "d:\Distrib\Mine\Python\AF_PatientBot\to_have_in_mind.py", line 194, in test_2
print(tag_list, len(tag_list), type(tag_list), tag_list[0])
IndexError: list index out of range