炫意html5
最早CSS3和HTML5移动技术网站之一

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

即可。

详见教程:

常见属性和函数 · 网页解析利器:BeautifulSoup
 

 

炫意HTML5 » BeautifulSoup如何判断Tag有没有某个属性?

CSS3教程HTML5教程