我在使用 BeautifulSoup 时注意到一些奇怪的事情,并且找不到任何文档来支持这一点,所以我想在这里问一下。
假设我们有一个像这样的标签,我们已经用 BS 解析了:
<td>Some Table Data</td>
<td></td>
官方记录 的提取数据的方法是 soup.string
。然而,这为第二个 <td>
标签提取了一个 NoneType。所以我尝试 soup.text
(因为为什么不呢?)它完全按照我的需要提取了一个空字符串。
但是我在文档中找不到对此的任何参考,并且担心有什么遗漏。谁能告诉我这是否可以使用,或者以后会不会引起问题?
顺便说一句,我正在从网页中抓取表格数据,并打算从数据中创建 CSV,因此我实际上需要空字符串而不是 NoneTypes。
原文由 mez.pahlan 发布,翻译遵循 CC BY-SA 4.0 许可协议
.string
在一个Tag
类型的对象上返回一个NavigableString
类型的对象。另一方面,.text
获取所有子字符串并使用给定的分隔符连接返回。 .text 的返回类型是unicode
对象。根据 文档,A
NavigableString
就像 PythonUnicode
字符串,除了它还支持 导航树 和 搜索树 中描述的一些功能。从
.string
的 文档 中,我们可以看到,如果 html 是这样的,然后,
.string
在第二个 td 将返回None
。但是.text
会返回一个空字符串,它是一个unicode
类型的对象。为了更方便,
string
tag
的便利属性,用于获取此标记中的单个字符串。tag
有一个子字符串,则返回值为该字符串。tag
没有孩子或超过一个孩子,那么返回值为None
tag
有一个子标签,则返回值是递归的子标签的“字符串”属性。和
text
如果
html
是这样的:.string
在四个td
将返回,.text
会给出这样的结果,