You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python3+BeautifulSoup时,contents方法为何返回带括号引号的文本?

为啥BeautifulSoup的contents和text返回结果不一样?

嘿,作为刚接触BeautifulSoup的新手,能注意到这个细节已经很棒啦!我来给你把这俩方法的区别说清楚:

1. contents是返回子节点的列表

contents方法会把当前标签的所有直接子节点打包成一个列表返回——这些子节点可能是其他标签对象,也可能是文本字符串。哪怕只有一个文本内容,它也会把这个文本放在列表里。

比如你抓取的公司名标签结构大概是这样:

<span class="company">Company A</span>

当你调用tag.contents时,得到的是['Company A']——这其实是一个只包含单个字符串元素的列表,你看到的方括号和单引号就是Python列表的默认打印格式,并不是文本本身带的。

如果标签里有多个子节点,比如:

<div class="company">
    <b>Company</b> A
</div>

contents会返回类似['\n', <b>Company</b>, ' A']的列表,里面包含了换行符、<b>标签对象和文本字符串。

2. text(或get_text())是返回拼接后的纯文本

text方法(现在更推荐用get_text(),功能更灵活)会递归遍历当前标签下的所有子孙节点,把所有文本内容拼接成一个完整的纯字符串返回,完全忽略标签结构。

还是上面的例子,调用tag.text会直接返回Company A——不管中间有没有其他标签,它都会把所有文本揉成一块,给你干净的结果,这也是为啥它更适合直接提取文本内容。

新手小建议

如果你的需求就是提取纯文本(比如抓公司名),直接用.text或者.get_text()就够了;如果需要处理标签的子节点(比如要区分文本和内嵌的其他标签),再考虑用contents或者children这类返回节点列表的方法。

内容的提问来源于stack exchange,提问作者Richard Golz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:24:05