Я ищу функцию, которая дает пару тегов HTML, возвращает текст внутри них. В идеале я хотел бы, чтобы это было рекурсивно:
Примеры:
С учетом
<a href="/wiki/Asset_management" title="It's Asset management">Asset management</a>
возвращает
Asset management
Учитывая
<a href="/wiki/Asset_management" title="Same Asset management"><p>Recursive Asset management</p></a>
возвращает
Recursive Asset management
Учитывая
<p><a href="/wiki/Asset_management" title="Same Asset management">Again Asset management</a></p>
возвращает
Again Asset management
Вот код, который у меня есть:
list_of_table_rows = tbl.findAll('tr')
for tr in list_of_table_rows[1:]:
th_list = tr.find("th")
td_list = tr.find("td")
if th_list is None or td_list is None:
continue
th_str = th.text
td_str = td.contents
# NOW THE PROBLEM IS td_str IS A LIST OF A BUNCH OF THINGS.
#PLAIN TEXT, BR TAG, LINKS, PARAGRAPHS, ETC.
#I WANT TO BE ABLE TO GET THAT PLAIN TEXT FOR LINKS AND PARAGRAPHS
for element in td_str:
if element == "<br/":
continue
# here...
Входные данные должны быть строкой, а не тегом или любым другим объектом. Моя проблема в рекурсии.
ОБНОВЛЕНИЕ: Это пример данных, с которыми я на самом деле работаю. Цель состоит в том, чтобы получить информацию из инфобоксов Википедии. Проблема в том, что часть информации в Infobox - это ссылки или абзацы. Например, на этой странице: https://en.wikipedia.org/wiki/Goldman_Sachs
<tr><th scope="row" style="padding-right:0.5em;">Founders</th><td
class="agent" style="line-height:1.35em;"><a
href="/wiki/Marcus_Goldman" title="Marcus Goldman">Marcus Goldman</a> .
<br /><a href="/wiki/Samuel_Sachs" title="Samuel Sachs">Samuel
Sachs</a></td></tr><tr>
Допустим, мы хотим выяснить, кто такие Основатели. Я хочу только текст в элементах. В этом случае список, содержащий Маркуса Голдмана и Сэмюэля Сакса. Я также попробовал read_html
от Pandas, но он объединяет строки вместе, и я не хочу, чтобы это произошло (вывод «Marcus GoldmanSamuel Sachs»)