BeautifulSoup4库中的.string输出为None问题

今天在学习爬虫过程中,对一个标签<td>中的字符串进行提取,用到td.string,但总是输出None,经过一番断点调试后,确定不是上下文程序的问题,开始对标签内容产生怀疑。

标签是这样的<td data-v-2a8fd7e4> 2 <!----></td>,感觉是因为里面添了一个<!---->造成的,手动去掉之后,果然输出了2.

在网上查找资料后,明白了为什么:
根据BeautifulSoup4官方文档 可以发现
1,当tag 包含了多个子节点,tag 就无法确定 .string 方法应该调用哪个子节点的内容, .string 的输出结果是 None。
2,text 返回的是标签的所有字符串连接成的字符串

首先先看一下这段代码

html = '<td> hello</td>'
soup = BeautifulSoup(html, 'html.parser')
td = soup.td
print(td.string)  # hello
print(td.text)    # hello
print(type(td.string))   # <class 'bs4.element.NavigableString'>
print(type(td.text))     # <class 'str'>

虽然.string和.text输出一样,但二者的类型是不一样的,string 属性的返回类型是 bs4.element.NavigableString,而 text 属性的返回类型是 str
再来看下一段代码:

html = '<td>hello <b>world</b></td>'
soup = BeautifulSoup(html, 'html.parser')
td = soup.td
print(td.string)  #None
print(td.text)    #hello world

此时.string输出为None,而.text正常输出

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值