0

所以我写了一些代码来只提取<p>一些 HTML 代码的标签中的内容。这是我的代码

soup = BeautifulSoup(my_string, 'html')
no_tags=' '.join(el.string for el in soup.find_all('p', text=True))

对于大多数运行它的示例,它可以按照我想要的方式工作,但是我注意到在示例中,例如

<p>hello, how are you <code>other code</code> my name is joe</p>

它什么也不返回。我想这是因为标签中还有其他<p>标签。所以要明确一点,我希望它返回的是

hello, how are you my name is joe

有人可以帮我解决如何处理这些例子吗?

4

1 回答 1

2

你的猜测是正确的。根据BeautifulSoup 文档,当有 1 个以上的孩子时.string返回(在您的示例中就是这种情况)。None

现在,您有几个选择。首先是使用.contents并递归迭代它,检查.string每个访问过的孩子的值。

从长远来看,这种方法可能会很麻烦。幸运的是,BeautifulSoup 4 提供了一种名为.strings的方法,它使您能够以一种简单的方式准确地完成您想要的事情。

最后,如果您知道文本会很简单并且想要一个简单的解决方案,您还可以使用正则表达式并将所有内容替换/<[^>]*>/为空字符串。但是,您必须意识到后果

于 2013-09-17T16:02:19.443 回答