在BeautifulGroup中检查属性?

2024-04-24 02:55:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过使用nextSibling遍历某个级别的元素来解析HTML中的一些数据,并根据遇到的每个元素的标记名和类执行不同的操作。

例如

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

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

在这样访问之前进行测试

if "name" in n:

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

编辑

向BeautifulGroup的开发人员发送了一封电子邮件,他建议使用

n.get("class")

如果“类”未设置,则返回“无”,这样就可以执行以下操作:

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

Tags: and数据实例name标记名称元素get
3条回答

试试这个~:

if class in n.attrs

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

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

除了使用get()方法

n.get("class")

另一个选项是使用has_attr()(使用has_key()预美化组4):

n.has_attr("class")

相关问题 更多 >