使用 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
。
我有以下 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
。