我在使用Beautifulsoup解析具有“ class”属性的HTML元素时遇到了麻烦。 代码看起来像这样
soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs:
if (div["class"] == "stylelistrow"):
print div
脚本完成后的同一行出现错误。
File "./beautifulcoding.py", line 130, in getlanguage
if (div["class"] == "stylelistrow"):
File "/usr/local/lib/python2.6/dist-packages/BeautifulSoup.py", line 599, in __getitem__
return self._getAttrMap()[key]
KeyError: 'class'
我如何摆脱这个错误?
#1楼
直接的方法是:
soup = BeautifulSoup(sdata)
for each_div in soup.findAll('div',{'class':'stylelist'}):
print each_div
确保使用findAll的大小写,而不是findall的大小写
#2楼
这对我有用:
for div in mydivs:
try:
clazz = div["class"]
except KeyError:
clazz = ""
if (clazz == "stylelistrow"):
print div
#3楼
从文档中:
从Beautiful Soup 4.1.2开始,您可以使用关键字参数 class_ 通过CSS类进行搜索 :
soup.find_all("a", class_="sister")
在这种情况下将是:
soup.find_all("div", class_="stylelistrow")
它也适用于:
soup.find_all("div", class_="stylelistrowone stylelistrowtwo")
#4楼
这对我来说可以访问class属性(在beautifulsoup 4上,与文档中所说的相反)。 KeyError会返回一个列表,而不是字典。
for hit in soup.findAll(name='span'):
print hit.contents[1]['class']
#5楼
特定于BeautifulSoup 3:
soup.findAll('div',
{'class': lambda x: x
and 'stylelistrow' in x.split()
}
)
将找到所有这些:
<div class="stylelistrow">
<div class="stylelistrow button">
<div class="button stylelistrow">
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3185383