.string和.text BeautifulSoup之间的区别

发布于 2021-01-29 15:06:03

我发现与BeautifulSoup一起使用时有些奇怪,找不到任何文档来支持此操作,所以我想在这里询问。

假设我们有一个这样的标签,我们已经用BS对其进行了解析:

<td>Some Table Data</td>
<td></td>

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

但是,我在文档中找不到对此的任何引用,并且担心某些内容会丢失。谁能告诉我这是否可以接受,否则以后会引起问题吗?

顺便说一句,我正在从网页上抓取表格数据,并打算从该数据创建CSV,因此我实际上确实需要空字符串而不是NoneTypes。

关注者
0
被浏览
69
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    .stringTag类型对象上返回NavigableString类型对象。另一方面,.text获取所有子字符串,并使用给定的分隔符将其串联返回。.text的返回类型是unicodeobject。

    文档中看,ANavigableString类似于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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看