使用BeautifulSoup解压缩时保留某些HTML标记

时间:2018-03-27 18:00:56

标签: python beautifulsoup web-crawler screen-scraping extraction

我有以下HTML:

cat /etc/letsencrypt/live/<domain>/privkey.pem /etc/letsencrypt/live/<domain>/fullchain.pem > /etc/courier/imapd.pem
/etc/init.d/courier-imap-ssl restart

我使用BeautifulSoup来获取<div class="description">Item 1<br>Item 2<br></div> 类中的内容:

description

我得到的是descriptionItems = container.find('div', attrs={'class': 'description'}).text.strip()

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

1 个答案:

答案 0 :(得分:1)

您可以使用:

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