Я хочу, чтобы все дочерние элементы тега были без пробелов между тегами.Но BeautifulSoups .contents
и .children
также возвращает пробел между тегами.
html = """
<div id="list">
<span>1</span>
<a href="2.html">2</a>
<a href="3.html">3</a>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.find(id='list').contents)
Это печатает:
['\n', <span>1</span>, '\n', <a href="2.html">2</a>, '\n', <a href="3.html">3</a>, '\n']
То же самое с
print(list(soup.find(id='list').children))
ЧтоЯ хочу:
[<span>1</span>, <a href="2.html">2</a>, <a href="3.html">3</a>]
Есть ли способ сказать BeautifulSoup, чтобы он возвращал только теги и игнорировал пробелы?
Документация не очень полезна в этой теме,HTML в этом примере не содержит пробелов между тегами.
Действительно, удаление HTML всех пробелов решает мою проблему:
html = """<div id="list"><span>1</span><a href="2.html">2</a><a href="3.html">3</a></div>"""
Этот HTML доставляет теги без пробелов между тегами.Но я надеялся использовать BeautifoulSoup, поэтому мне не придется возиться с исходным кодом HTML.Я надеялся, что BeautifulSoup сделает это для меня.
Другой обходной путь может быть:
print(list(filter(lambda t: t != '\n', soup.find(id='list').contents)))
Но это кажется ненадежным, потому что пробел гарантированно всегда будет '\n'
?
Примечание для дублирующей маркирующей бригады:
Существует множество вопросов, касающихся BeautifulSoup и пробелов.Большинство из них просят избавиться от пробелов из «отображаемого текста».
Например:
BeautifulSoup - избавиться от пробелов абзаца / разрывов строк
Удаление новой строки '\ n' из вывода python BeautifulSoup
Оба вопроса требуют текст без пробелов.Я хочу теги без пробелов.Решения там не относятся к моему вопросу.
Другой пример:
Регулярное выражение для класса с пробелами с использованием Beautifulsoup
Этот вопрос опробел в атрибуте класса.