转自https://www.crifan.com/python_beautifulsoup_string_vs_text/

【背景】

是别人问我的:

BeautifulSoup 4中,soup.string和soup.text何有区别。

【折腾过程】

1.去beautifulsoup的官网:

bs3:

http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html

bs4

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#get-text

找了半天,都没有soup.text的用法。

2.但是该人的确使用代码:

price_div = li.find('div' , {'class':'pPrice clearfix'})
vs.append(price_div.em.text.split('\n')[5].strip().encode('gbk'))

是可以运行的。

3.开始我以为此处其html中有个特殊的em和text节点呢,类似于:

<html><em><text>xxx</text></em>
</html>

结果后来证实,其html中只有em,em其下没有text这个tag节点。

4.官网的文档中,和.text最接近的,也只有:

get_text()

5.后来下载到最新源码

http://www.crummy.com/software/BeautifulSoup/bs4/download/4.3/beautifulsoup4-4.3.1.tar.gz

解压后,看到:

\beautifulsoup4-4.3.1\bs4\element.py

中,有对应的代码:

    @propertydef stripped_strings(self):for string in self._all_strings(True):yield stringdef 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_texttext = property(get_text)

所以,结论就很明显了。

【总结】

beautifulsoup中,对外接口,没有提供text这个属性,只有string这个属性值;

beautifulsoup内部才有text这个属性,只供内部使用 –> 如果你想要用text值,应该调用对应的get_text()

而你之所有能够直接用soup.text而没报错,应该是和python的class的property没有变成private有关系 –>导致你外部也可以访问到这个,本身是只供内部使用的属性值-> 这个要抽空深究了。

转载请注明:在路上 » 【整理】BeautifulSoup中的.string和.text的区别

那么get_text()h和string有什么区别的,我自己试了一下,

html="'

<html><head><title >The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1"><!--Elsie--></a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
and they lived at the bottom of a well.</p>
<p class="story">...</p>

'''
发现如果是对a标签进行用get_text方法,返回的是空白
而如果是.string方法,对任何标签都能获得其中注释的内容,即Elsie

BeautifulSoup中的.text方法和get_text()方法的区别相关推荐

  1. asp.net TemplateField模板中的Bind方法和Eval方法

    TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现.以下是Bind方法的格式,Eval的格式也是和Bind一样的. Bind("列 ...

  2. ExtJS中listener方法和handler方法的区别

    listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...

  3. python predict_对Keras中predict()方法和predict_classes()方法的区别说明

    1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...

  4. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

  5. Java 8 辣么大(lambda)表达式不慌之—–(四)示例-Collectors中的中的joining 方法和mapping方法

    Java 8 辣么大(lambda)表达式不慌之-–(四)示例-Collectors中的joining 方法和mapping方法 joining 方法 mapping方法 先定义好后面做示例要用的数据 ...

  6. 浅谈BufferedReader中的read()方法和readLine()方法

    浅谈BufferedReader中的read方法和readLine方法 前言:本人比较菜啦,如果有错误,还请大佬指正. 1. read方法 查看API文档我们可以发现BufferedReader类中的 ...

  7. 【网络】HTTP中的GET方法和POST方法

    1.GET方法:获取资源 GET方法用来请求访问已被URL识别的资源.指定的资源经服务器端接续后返回内容.也就是说,如果请求的资源是文本,那就保持原样返回:如果像是CGI(Conmmon Gatewa ...

  8. VBA中Activate方法和Select方法的区别

    VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...

  9. 请简述一下线程的sleep()方法和yield()方法的区别?

    请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...

最新文章

  1. PCL显示法线no override found vtkactor
  2. 微服务时代组件化和服务化的抉择
  3. java 构造方法
  4. 编程 ul 不能一行显示 跳到下行_单片机编程魔法之三权分立
  5. 基础数学:关于二次无理数
  6. 【译】IPFS — The Permanent, Distributed Web Continues…..
  7. 火星人乘坐核动力飞船回故乡
  8. Dubbo学习总结(2)——Dubbo架构详解
  9. Html5结合JS实现浏览器全屏功能
  10. 2012.7.24---C#(2)
  11. CAS Client 3.2.1 配置详解
  12. heroku服务器_如何在Heroku上使用Express服务器部署React应用
  13. java获取页面点击次数_在Java中怎样得出一个按钮点击的次数
  14. 余承东宣布鸿蒙系统视频,余承东宣布鸿蒙系统开源:打造全球的操作系统
  15. 房友软件注册码暴力输入程序
  16. Spring AOP原理之动态代理
  17. 补习班停了,家长“卷向”兴趣班
  18. 跟着团子学SAP CS:SAP CS(客户服务)模块概览
  19. 缓存之王 | Redis最佳实践开发规范FAQ
  20. Python3修改电脑mac地址

热门文章

  1. 自由自在公司休闲食品让生活进入“休闲时代“
  2. 【转】ABAP BASE64编码与解码练习
  3. 【转】SAP中的FTP操作样例
  4. 00后感兴趣的“微醺生意”,居然被这位70后老兵做成功了?
  5. 文件头_常见文件文件头
  6. linux下软件实施,linux系统未来或应用广泛
  7. python3堆排序_python 堆排序
  8. 为什么每个邮件收到后都会有一个htm的附件_Python 发送邮件各种姿势
  9. php yii2.0 读取excel,yii2.0使用excel Gridview读取excel内容
  10. 从0搭建一个Springboot+vue前后端分离项目(八)把数据从后台传到前端进行展示渲染,完善增删改查