BeautifulSoup, поиск n-й таблицы без использования find_all () - PullRequest
0 голосов
/ 25 января 2019

Я хочу найти n-ую таблицу с помощью BeautifulSoup. Пока это делает работу для меня.

table = soup.find_all('table',{'class':'wikitable sortable jquery-tablesorter'})[nth]

Но если я точно знаю, что это n-я таблица, где n определено мной, есть ли способ избежать поиска и сохранения всех предыдущих таблиц? Я чувствую, что если бы был способ получить таблицу, если бы она была n-ой, мой код работал бы намного быстрее. Таблицы из Википедии.

1 Ответ

0 голосов
/ 25 января 2019

Используйте .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')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...