В определении метода index()
мы видим следующий код:
def index(self, element):
"""
Find the index of a child by identity, not value. Avoids issues with
tag.contents.index(element) getting the index of equal elements.
"""
for i, child in enumerate(self.contents):
if child is element:
return i
raise ValueError("Tag.index: element not in tag")
Так что на самом деле вам нужно взглянуть на свойство .contents
, которое показывает следующие члены (дочерние элементытег <ol>
):
0 <class 'bs4.element.NavigableString'>
1 <class 'bs4.element.Tag'> <li>Test lists</li>
2 <class 'bs4.element.NavigableString'>
3 <class 'bs4.element.Tag'> <li>Second option</li>
4 <class 'bs4.element.NavigableString'>
5 <class 'bs4.element.Tag'> <li>Third option</li>
6 <class 'bs4.element.NavigableString'>
Другими словами, родительский элемент для ваших тегов <li>
, <ol>
, имеет других дочерних элементов - навигационные строки, которые вы не захватываете напрямую, потому что вы толькоискал элементы списка (soup.find_all('li')
).