Печать только внешних тегов в HTML-коде с помощью BeautifulSoup - PullRequest
0 голосов
/ 25 июня 2019

Часть всего HTML-кода выглядит следующим образом

<td class="col2">
<a class="reserve" data-target="#myModal" data-toggle="modal"     
href="example.com" rel="nofollow"></a></td>

Я нашел его с помощью

soup.find_all('td', class_='col2')

Однако я хотел бы извлечь не всю часть кода, а только

<td class="col2"></td>

Возможно ли использовать BeautifulSoup?Я знаю, что могу сделать это, используя строки, но мне просто любопытно.

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Вы можете установить атрибут string в пустую строку (''):

html = """
<td class="col2">
<a class="reserve" data-target="#myModal" data-toggle="modal"     
href="example.com" rel="nofollow"></a></td>
"""
soup= BeautifulSoup(html)
x  =soup.find_all('td', class_='col2')[0]
x.string=''
print(x)

выход

<td class="col2"></td>

EDIT

Вот что документация говорит об этом:

Если вы установите атрибут .string тега, содержимое тега будет заменено на строку, которую вы дадите

Будьте осторожны: если тег содержит другие теги, они и все их содержимое будут уничтожены.

1 голос
/ 25 июня 2019

Вы можете извлечь все элементы внутри td.col2 с помощью функции extract():

data = '''
<td class="col2">
<a class="reserve" data-target="#myModal" data-toggle="modal"
href="example.com" rel="nofollow"></a></td>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

for td in soup.select('td.col2'):
    for t in td.select('*'):
        t.extract()
    print(td)

Отпечатки:

<td class="col2">
</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...