.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返回的是,两段文本的拼接。