首页 文章

BeautifulSoup中的.text两次打印数据/信息

提问于
浏览
0

我开始使用BeautifulSoup并试图理解汤对象的文本和字符串属性之间的区别 . 这是我正在使用的HTML代码: -

html_doc = """
<html>
    <body>
        <table>
            <tr>
                <td></td>
                <td>1.0 SOME TEXT</td>
                <td>
                    <p>2.0 SOME TEXT</p>
                </td>
                <td>
                    <p>3.1 SOME</p>
                    <p>3.2 TEXT</p>
                </td>
            </tr>
        </table>
    </body>
</html>
"""

这就是我所做的: -

soup = bs(html_doc, 'html.parser')
tr = soup.find('tr')
children = tr.findChildren()

现在,如果我像我在这里一样使用.text: -

for child in children:
print(child.text)

输出是: -

1.0 SOME TEXT

2.0 SOME TEXT

2.0 SOME TEXT

3.1 SOME
3.2 TEXT

3.1 SOME
3.2 TEXT

但如果我使用.string属性,这是输出: -

None
1.0 SOME TEXT
None
2.0 SOME TEXT
None
3.1 SOME
3.2 TEXT

现在,我理解没有的标签的“无”和缺少文本

标签,没有文字/信息/数据,但我不明白为什么 . BeautifulSoup中的.text打印数据/信息两次 .

1 回答

  • 0

    所以 .text 会得到文本解析文本,无论字符串是直接在节点上还是在childNode中,但另一方面 .string 将会像这样"If a tag contains more than one thing, then it’s not clear what .string should refer to, so .string is defined to be None:"

    print(soup.html.string)
    # None
    

    在这里阅读更多关于 .string https://www.crummy.com/software/BeautifulSoup/bs4/doc/#string的使用

相关问题