Если вы хотите настроить таргетинг на все таблицы, вы можете просто выбрать все таблицы, которые соответствуют вашим критериям select
вернет все таблицы:
import requests
from bs4 import BeautifulSoup
page = requests.get("https://en.wikipedia.org/wiki/List_of_QI_episodes")
soup = BeautifulSoup(page.content, "lxml")
print(soup.select("table.wikitable.plainrowheaders.wikiepisodetable")
Если вы хотите настроить таргетинг на каждуюПо отдельности для таблицы можно использовать селектор :has()
для нацеливания на заголовок перед таблицей, которая содержит конкретный требуемый id
, а затем комбинатор +
, который найдет следующего потомка.Вот простой пример, нацеленный на две таблицы.
import requests
from bs4 import BeautifulSoup
page = requests.get("https://en.wikipedia.org/wiki/List_of_QI_episodes")
soup = BeautifulSoup(page.content, "lxml")
for tid in ('Pilot', 'Series_A_\\.282003\\.29'):
table = soup.select_one("h3:has(span#{}) + table.wikitable.plainrowheaders.wikiepisodetable".format(tid))
print(table)
Вы можете расширить аналогичную логику, чтобы выбрать любую цель.
РЕДАКТИРОВАТЬ: используйте select_one
во втором примере какмы нацелены на одну таблицу вместо многих таблиц.