当前位置: 首页 > 面试题库 >

.string和.text BeautifulSoup之间的区别

华良平
2023-03-14
问题内容

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

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

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

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

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

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


问题答案:

.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


 类似资料:
  • 问题内容: 最近,我一直在Golang中努力处理SQL NULL值。在尝试使用和未能成功解组JSON对象后。 使用字符串指针的解决方案似乎可以与Decode()和nil值完美配合。那么和之间有什么区别?只是零检查吗? 问题答案: SQL具有与Golang不同的空值。 如果您查看的定义,那么您将获得: 如您所见,这是一种表示来自SQL的空字符串(对应于“ NULL”)的方法。另一方面,nil 是指向

  • 问题内容: 声明 Array 和 Dictionary的 更好方法,我都使用了: 对我来说,编码方面的速度非常快,但实际上两者在编译器和性能方面有何不同,我们应该遵循哪一个? 问题答案: 从Swift上的iOS开发者库… Swift数组的类型完整写为Array ,其中Element是允许数组存储的值的类型。您还可以将简写形式的数组类型写为[Element]。尽管 这两种形式在功能上是相同的 ,但

  • 问题内容: 在Go语言中, 是一个字符串数组 并且我们也将其用作参数。 有什么区别? 功能定义: 我可以像下面这样调用此函数吗? 问题答案: 是一个字符串数组 从技术上讲,这是引用基础数组的切片 并且我们也将其用作参数。 有什么区别? 关于结构,真的没有。两种语法得出的数据类型相同。 该参数语法形成了可变参数的参数。它将接受零个或多个参数,并将它们作为切片引用。 关于调用,您可以使用以下语法将字符

  • 问题内容: 之间有什么区别 和 问题答案: 仅当对象 实际上是 字符串时,才强制转换为字符串: 当对象是其他对象时,它将不起作用: 但是,您将尝试将传递给它的任何内容转换为。它使用该对象的来处理原语()和对象(): 请特别注意最后一个示例:传递给将返回字符串。

  • 问题内容: 之间有什么区别: 和 我不相信,但是我想知道。 问题答案: 从语义上讲,它们是相同的。但是,我建议在声明数组时使用后一种语法()。以前的语法主要用于与C语法兼容。 因为总体上来说,它是Java中对象的类型,所以它更加一致,而且很清楚不要将其拆分。

  • 问题内容: 我可以使用字符串插值或String初始值设定项将int,float,double读取为字符串。结果总是一样的。 结果是一样的。d的值为“ 2e” 我发现的唯一区别是,字符串插值()可以在双引号内使用,而String()不能在双引号内使用。 这就是全部?我在这里想念什么吗? 问题答案: 字符串插值为您提供了调用该项目的结果。 调用初始化程序并返回一个值,该值通常与从字符串插值中获得的值相