Используйте .select
с nth-of-type
. Я не уверен, что это заставит ваш код работать быстрее, для этого, пожалуйста, ознакомьтесь с разделом повышения производительности документации.
from bs4 import BeautifulSoup
html="""
<table class="1">
</table>
<table class="2">
</table>
<table class="3">
</table>
<table class="4">
</table>
<table class="5">
</table>
"""
soup=BeautifulSoup(html,'html.parser')
print(soup.select('table:nth-of-type(3)'))
выход
[<table class="3">
</table>]
Селектор css .class:nth-of-type(n)
НЕ работает с BeautifulSoup. Но если вы знаете родительский класс таблиц, вы можете сделать что-то вроде '.parent table:nth-of-type(n)'
from bs4 import BeautifulSoup
html="""
<div class="parent1">
<table class="tbl">
not our table 1
</table>
<table class="tbl">
not out table 2
</table>
</div>
<div class="parent2">
<table class="tbl">
our table 1
</table>
<table class="tbl">
our table 2
</table>
</div>
"""
soup=BeautifulSoup(html,'html.parser')
print(soup.select('.parent2 table:nth-of-type(2)'))
Ouput
[<table class="tbl">
our table 2
</table>]
Вышеуказанный вывод также может быть выполнен с помощью soup.select('.parent2 .tbl ~ .tbl')