检查BeautifulSoup中的属性?

时间:2011-08-09 22:29:55

标签: python beautifulsoup

我正在使用nextSibling遍历某个级别的元素来解析HTML中的一些数据,并根据遇到的每个元素的标记名称和类做不同的事情。

如,

if n.name == "p" and n.class == "poem": blah()

但如果元素没有类或者它不是Tag的实例而因此没有名称,则会引发错误。

在像这样访问之前进行测试

if "name" in n:

总是返回false。我可以检查nextSibling返回的对象的类型,试图清除NavigableString和Comment,但必须有一个更简单的方法。

修改

通过此问题向BeautifulSoup发送电子邮件,他建议使用

进行测试
n.get("class")

如果未设置“class”,则返回None,这样就可以执行:

if n.get("class") == "poem": blah()

4 个答案:

答案 0 :(得分:14)

除了使用get()方法

之外
n.get("class")

另一个选择是使用has_attr()(使用has_key()前美女论坛4):

n.has_attr("class")

答案 1 :(得分:6)

在这种情况下,例外可能是你的朋友:

try:
    if n.name == 'p' and n['class'] == "poem":
        blah()
except AttributeError: # element does not have .name attribute
    do_something()
except KeyError: # element does not have a class
    do_something_else()

如果是这样的话,你也可以将它包装成一个except

try:
    if n.name == 'p' and n['class'] == "poem":
        blah()
except (AttributeError, KeyError):
    pass

答案 2 :(得分:1)

试试这个〜:

if class in n.attrs

答案 3 :(得分:-1)

为什么不呢?

if hasattr(n,"name"):