如何测试美丽汤对象的类型?

时间:2018-03-05 07:48:02

标签: python python-2.7 beautifulsoup

这可能是一个非常基本的Python问题,尽管我在Beautiful Soup中运行它。

我想要做的基本事情是只从HTML文件中提取输出文本。

例如,在下面包含的HTML文件中,我想只提取0123,abc,def和ghi,但不提取标签和属性。

我最了解BS我应该能够通过HTML标记的后代进行递归,并且只包含NavigableStrings。

问题是我不知道如何编写if语句来测试该类型。请参阅下面的python代码中的注释。

任何解决方案?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>0123</title>
</head>
<body>
    <div>
        <p>abc</p>def
        <a href="wxy.z">ghi</a>
    </div>
</body>
</html>


# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup

with open('simple.html', 'r') as inf:
    soup = BeautifulSoup(inf.read(), 'lxml')
    for e in soup('html'):
        for d in e.descendants:
            print d     # HERE I WANT TO SKIP EXCEPT FOR NAVIGABLE STRINGS

1 个答案:

答案 0 :(得分:2)

由于您正在寻找可导航字符串,因此您的条件应为:

if isinstance(d, bs4.element.NavigableString):
    print d

开始时不要忘记import bs4