.string和.text BeautifulSoup之间的区别
我发现与BeautifulSoup一起使用时有些奇怪,找不到任何文档来支持此操作,所以我想在这里询问。
假设我们有一个这样的标签,我们已经用BS对其进行了解析:
<td>Some Table Data</td>
<td></td>
提取数据的官方记录方法是soup.string
。但是,这为第二个<td>
标签提取了NoneType
。所以我尝试了soup.text
(因为为什么不呢?),它完全按照我的意愿提取了一个空字符串。
但是,我在文档中找不到对此的任何引用,并且担心某些内容会丢失。谁能告诉我这是否可以接受,否则以后会引起问题吗?
顺便说一句,我正在从网页上抓取表格数据,并打算从该数据创建CSV,因此我实际上确实需要空字符串而不是NoneTypes。
-
.string
在Tag
类型对象上返回NavigableString
类型对象。另一方面,.text
获取所有子字符串,并使用给定的分隔符将其串联返回。.text的返回类型是unicode
object。从文档中看,A
NavigableString
类似于PythonUnicode
字符串,除了它还支持导航树
和搜索树中描述的某些功能。从的文档中
.string
,我们可以看到,如果html是这样的,<td>Some Table Data</td> <td></td>
然后,
.string
第二个td将返回None
。但是.text
会返回空字符串,它是一个unicode
类型对象。为了更方便
string
- 的便捷属性,
tag
用于获取此标记内的单个字符串。 - 如果
tag
拥有单个字符串子代,则返回值为该字符串。 - 如果
tag
没有孩子或有一个以上孩子,则返回值为None
- 如果它
tag
具有一个子标记,则返回值将递归地作为子标记的’string’属性。
和
text
- 获取所有子字符串,并使用给定的分隔符将其返回。
如果
html
是这样的:<td>some text</td> <td></td> <td><p>more text</p></td> <td>even <p>more text</p></td>
.string
在四个td
将返回,some text None more text None
.text
将给出这样的结果,some text more text even more text
- 的便捷属性,