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

时间:2017-06-13 10:13:07

标签: html python-3.x beautifulsoup

我开始使用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

现在,我理解“没有”&#39;没有

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

1 个答案:

答案 0 :(得分:0)

因此,无论字符串是直接在节点上还是在childNode中,.text都会为您提供文本解析文本,但另一方面,.string将会像这样“如果一个tag包含多个东西,然后不清楚.string应该引用什么,所以.string被定义为None:“

print(soup.html.string)
# None

请在此处详细了解.string https://www.crummy.com/software/BeautifulSoup/bs4/doc/#string

的使用情况