BeautifulSoup中的.text 和get_text()的区别,.text与.string的区别

.text 和get_text()的区别

结论:

1、不带参数调用get_text() 与.text 是等效的,没有区别。

2、但是,get_text 还可以支持各种关键字参数来改变它的行为方式(separator、strip、types).如果想更灵活地控制结果,可以使用get_text。

3、视觉阅读上.text 似乎更优雅一点。

官方源代码的实现:

    @property
    def stripped_strings(self):
        for string in self._all_strings(True):
            yield string
 
    def get_text(self, separator=u"", strip=False,
                 types=(NavigableString, CData)):
        """
        Get all child strings, concatenated using the given separator.
        """
        return separator.join([s for s in self._all_strings(
                    strip, types=types)])
    getText = get_text
    text = property(get_text)

参考:https://blog.csdn.net/f156207495/article/details/78074240

.text和.string之间的差异,看例子:

1、<td>some text</td> 
2、<td></td>
3、<td><p>more text</p></td>
4、<td>even <p>more text</p></td>

.string 的结果为:

1、some text
2、None
3、more text
4、None

.text 的结果为:

1、some text
2、
3、more text
4、even more text

结论:

1、第一行,在指定标签td,没有子标签,且有文本时,两者的返回结果一致,都是文本

2、第二行,在指定标签td,没有子标签,且没有文本时,.string返回None,.text返回为空

3、第三行,在指定标签td,只有一个子标签时,且文本只出现在子标签之间时,两者返回结果一致,都返回子标签内的文本

4、第四行,最关键的区别,在指定标签td,有子标签,并且父标签td和子标签p各自包含一段文本时,两者的返回结果,存在很大的差异

.string返回为空,因为文本数>=2,string不知道获取哪一个

.text返回的是,两段文本的拼接。

转自:https://zhuanlan.zhihu.com/p/30911642

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值