BeautifulSoup如何判断Tag有没有某个属性?
我在用BeautifulSoup处理一组<tr>标签,结构如下:
<tr>……</tr>
<tr>……</tr>
<tr>……</tr>
<tr class='xxx'>……</tr>
<tr>……</tr>
<tr>……</tr>
我现在在通过迭代器Iterator依次处理每一个<tr>标签,需要在遇到class='xxx'的<tr>时结束。
但我不能这样写:
myclass=mytr['class']
if(myclass=='xxx'):
因为这样处理第一个<tr>的时候就会报错:
KeyError: 'class'
第一个<tr>没有class属性,所以尝试获取其class属性会报错。
所以,这种情况需要如何来解决?求解答。
回答
判断tag标签是否存在class属性
from bs4 import BeautifulSoup
str = "<tr>……</tr>\n<tr>……</tr>\n<tr>……</tr>\n<tr class='xxx'>……</tr>\n<tr>……</tr>\n<tr>……</tr>"
soup = BeautifulSoup(str, 'lxml')
select = soup.select("tr")
for item in select:
if 'class'in item.attrs:
print(item)
BeautifulSoup中,每个tag都有个attrs的属性,是dict字典类型
官网文档 Attributes
而python中判断一个dict中是否有某个key,用 in 即可。
所以代码可以写成:
if "class" in yourTrSoup.attrs:
# do what you want
即可。
详见教程: