我正在使用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()
答案 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"):