blo*_*cks 13 python beautifulsoup
我正在使用nextSibling遍历某个级别的元素来解析HTML中的一些数据,并根据遇到的每个元素的标记名称和类来执行不同的操作.
例如,
if n.name == "p" and n.class == "poem": blah()
Run Code Online (Sandbox Code Playgroud)
但是如果元素没有类或者它不是Tag的实例而因此没有名称,则会引发错误.
在访问之前进行测试
if "name" in n:
Run Code Online (Sandbox Code Playgroud)
总是返回假.我可以检查nextSibling返回的对象的类型,试图清除NavigableString和Comment,但必须有一个更简单的方法.
编辑
通过这个问题通过电子邮件发送了BeautifulSoup的开发者,他推荐使用
n.get("class")
Run Code Online (Sandbox Code Playgroud)
如果未设置"class",则返回None,这样就可以:
if n.get("class") == "poem": blah()
Run Code Online (Sandbox Code Playgroud)
Jas*_*sch 15
除了使用get()方法
n.get("class")
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用has_attr()(使用has_key()pre BeautifulSoup 4):
n.has_attr("class")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,例外可能是你的朋友:
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()
Run Code Online (Sandbox Code Playgroud)
except如果是这样的话你也可以把它包装成一个:
try:
if n.name == 'p' and n['class'] == "poem":
blah()
except (AttributeError, KeyError):
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25814 次 |
| 最近记录: |