APP下载
报价宝  ›  科技  › 

Python:bs4中 string 属性和 text 属性的区别及背后的原理

报价宝 来源:baojiabao.com 发布时间:2020-01-12 05:50:00 11月03日更新
报价宝综合消息Python:bs4中 string 属性和 text 属性的区别及背后的原理

刚开始接触 bs4 的时候,我也很迷茫,觉得 string 属性和 text 属性是一样的,不明白为什么要分成两个属性。

输出的结果是一样的。但实际上,string 属性的返回型别是 bs4.element.NavigableString,而 text 属性的返回型别是 str。

不要小看了这点区别,看下面的示例:

string 属性的输出结果为:

text 属性的输出结果为:

理解了 string 属性和 text 属性的返回型别,就可以明白结果为什么是这样的了。

第一项,返回都是 “some text”,这可以理解;

第二项,string 返回 None,因为不存在 NavigableString 节点;

第三项,text 返回的是标签的所有字串连线成的字串,所以是“more text”

第四项,bs4 的文件中指出:(地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#string)

如果 tag 只有一个 NavigableString 型别子节点,那么这个 tag 可以使用 .string 得到子节点。

如果一个 tag 仅有一个子节点,那么这个 tag 也可以使用 .string 方法,输出结果与当前唯一子节点的 .string 结果相同。

如果 tag 包含了多个子节点,tag 就无法确定 .string 方法应该呼叫哪个子节点的内容, .string 的输出结果是 None。

那么自然 string 属性返回的结果是 None,text 属性返回的结果是“even more text”

另外,要注意的是 find 方法中的 text 引数,官方解释是:text 引数用于搜寻字串会找到 .string 方法与 text 引数值相符的tag。

也就是说,虽然引数名是 text,但实际上搜索的是 string 属性。

看下面的例子,我们需要查询到包含附件连结的标签

用 string 属性来获取的话,程式码如下:

可以看到获取到的是 NavigableString 标签,要获取标签,可以配合 find_next_sibling 方法。

如果使用使用 text 属性的话,就必须传递方法来实现,但结果可能就不是你想要的了

结果如下,把每一层显示的都包含进来了。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 汽车价格 电视机价格 红米手机价格 降噪耳机价格