使用 BeautifulSoup 提取时保留某些 HTML 标签

Preserve certain HTML tags when extracting with BeautifulSoup

我有以下 HTML:

<div class="description">Item 1<br>Item 2<br></div>

我用BeautifulSoup获取description中的内容 class:

descriptionItems = container.find('div', attrs={'class': 'description'}).text.strip()

我得到的是Item 1Item 2

如何获取 Item 1<br>Item 2<br>,即 div 标签之间的内容,包括两个 br 标签?

你可以使用这个:

container = BeautifulSoup('<div class="description">Item 1<br>Item 2<br></div>', 'lxml')
desc_items = ''.join(str(x) for x in container.find('div', class_='description').contents)
print(desc_items)
# Item 1<br/>Item 2<br/>

解释:

.contents给你一个标签所有内容的列表。

['Item 1', <br/>, 'Item 2', <br/>]

您只需使用 ''.join() 即可加入他们。但是,像 <br/> 这样的标签类型是 <class 'bs4.element.Tag'>,所以 join 会引发 TypeError 错误,因为它期望所有项目都是 str 类型。因此,您必须先将其转换为 str