我使用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'
我该怎么摆脱或这个错误?
9 回答
您可以优化搜索,只使用BS3查找具有给定类的div:
一个直接的方式是:
确保你取出 findAll 的外壳,它不是 findall
更新:2016在最新版本的beautifulsoup中,方法'findAll'已重命名为'find_all' . Link to official documentation
因此,答案将是
尝试先检查div是否具有类属性,如下所示:
这对我有用:
从文档:
As of Beautiful Soup 4.1.2, you can search by CSS class using the keyword argument class_:
在这种情况下,将是:
它也适用于:
你可以很容易地找到一个 class ,但是如果你想通过两个 class 的交集找到它,那就更难了,
来自documentation(重点补充):
需要说明的是,这只选择了三个标记,它们都是三角形和体类 .
要查找一组类中的任何一个的交集(不是交集,而是联合),您可以给
class_
关键字参数列表(从4.1.2开始):另请注意,findAll已从camelCase重命名为更多Pythonic
find_all
.具体到BeautifulSoup 3:
将找到所有这些:
这对我来说可以访问class属性(在beautifulsoup 4上,与文档所说的相反) . KeyError返回的列表不是字典 .