.string和.text BeautifulSoup之间的区别

pir*_*ray 26 python beautifulsoup

我注意到使用BeautifulSoup时有些奇怪的事情,找不到任何文档来支持这个,所以我想在这里问一下.

假设我们有一个像我们用BS解析的标签:

<td>Some Table Data</td>
<td></td>
Run Code Online (Sandbox Code Playgroud)

官方文件的方式来提取数据soup.string.但是,这为第二个<td>标记提取了NoneType .所以我尝试了soup.text(因为为什么不呢?)并且它完全按照我的意愿提取了一个空字符串.

但是我在文档中找不到任何对此的引用,并且担心某些事情是错过的.任何人都可以告诉我这是否可以使用或以后会引起问题?

顺便说一句,我正在从网页上抓取表格数据,并且意味着从数据创建CSV,所以我确实需要空字符串而不是NoneTypes.

sal*_*hed 48

.stringTag类型对象上返回一个NavigableString类型对象.另一方面,.text获取所有子字符串并使用给定的分隔符返回连接.返回类型.text是unicode对象.

文档中,A NavigableString就像一个Python Unicode字符串,除了它还支持导航树搜索树中描述的一些功能.

文档.string我们可以看到,如果html是这样的,

<td>Some Table Data</td>
<td></td>
Run Code Online (Sandbox Code Playgroud)

然后,.string在第二个td将返回None.但是.text会返回并清空一个unicode类型对象的字符串.

为了更方便,

<td>some text</td>
<td></td>
<td><p>more text</p></td>
<td>even <p>more text</p></td>
Run Code Online (Sandbox Code Playgroud)
  • a的便捷属性,string以获取此标记内的单个字符串.
  • 如果tag有一个字符串子项,则返回值为该字符串.
  • 如果tag没有孩子或多个孩子,则返回值为tag
  • 如果这None有一个子标记,则返回值是子标记的'string'属性,递归.

tag

  • 获取所有子字符串并使用给定的分隔符返回连接.

如果text是这样的:

some text
None
more text
None
Run Code Online (Sandbox Code Playgroud)

html四人.string将返回,

some text

more text
even more text
Run Code Online (Sandbox Code Playgroud)

td 会得到这样的结果,

<td>Some Table Data</td>
<td></td>
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢帮助了很多.很好的解释.谢谢. (2认同)
  • 我想知道为什么文档中没有提到“.text”...... (2认同)

小智 7

如果一个标签包含不止一个东西,那么它\xe2\x80\x99s不清楚.string应该引用什么,所以.string被定义为None:

\n\n

例子:

\n\n
<td>sometext<p>sometext</p></td>\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果 td.string 完成,上面的代码将返回 NoneType,因为 td 包含文本以及另一个 p 标签。但 td.text 会给出: sometextsometext

\n