Как получить все элементы текста в последовательном порядке

Я получаю текст из таблицы, используя bs4 как

soup = BeautifulSoup(html_text)
table = soup.find("table", attrs={"class":"table_class"})

headings = [i.get_text() for i in table.find("tr").find_all("td")]

Но как я могу иметь 2 findall в последовательности? Я попробовал ниже

headings = [i.get_text() for i in table.find("tr").find_all("td").find_all("div")]

Если я просто использую find("td") Я получаю только одно значение не все значения из таблицы. Как я могу пройти через "td" и за каждый элемент получи "div"

2 ответа

Решение

Всякий раз, когда у вас есть проблема с использованием итераторов / итераторов, посмотрите в itertools.

from itertools import chain

headings = [i.get_text() for i in chain.from_iterable(x.find_all("div") for x in table.find("tr").find_all("td"))]

Существует более простой и лаконичный способ - селектор CSS:

[elm.get_text() for elm in soup.select("table.table_class tr td div")]
Другие вопросы по тегам