如何按类查找元素

我无法使用Beautifulsoupparsing具有“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' 

我如何摆脱或这个错误?

您可以优化您的search,只使用BS3find给定类别的div:

 mydivs = soup.findAll("div", { "class" : "stylelistrow" }) 

从文档:

至于美丽的汤4.1.2,您可以使用关键字参数class_来searchCSS类:

 soup.find_all("a", class_="sister") 

在这种情况下将是:

 soup.find_all("div", class_="stylelistrow") 

它也可以用于:

 soup.find_all("div", class_="stylelistrowone stylelistrowtwo") 

更新:2016在beautifulsoup的最新版本中,findAll方法已被重命名为“find_all”。 链接到官方文档

方法名称列表已更改

因此答案将是

 soup.find_all("html_element", class_="your_class_name") 

具体到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"> 

一个简单的方法是:

 soup = BeautifulSoup(sdata) for each_div in soup.findAll('div',{'class':'stylelist'}): print each_div 

确保你拿的findAll ,它不findall所有的shell

尝试检查div是否具有类属性,如下所示:

 soup = BeautifulSoup(sdata) mydivs = soup.findAll('div') for div in mydivs: if "class" in div: if (div["class"]=="stylelistrow"): print div 

这适用于我访问类属性(在美观,与文档说的相反)。 KeyError是一个不是字典返回的列表。

 for hit in soup.findAll(name='span'): print hit.contents[1]['class'] 

这对我工作:

 for div in mydivs: try: clazz = div["class"] except KeyError: clazz = "" if (clazz == "stylelistrow"): print div 

如何按类查找元素

我无法使用Beautifulsoupparsing具有“class”属性的html元素。

你可以很容易地find一个类,但是如果你想通过两个类的交集find,那就更困难一点了,

从文档 (重点添加):

如果您要search匹配两个或更多 CSS类的标签,则应使用CSSselect器:

 css_soup.select("p.strikeout.body") # [<p class="body strikeout"></p>] 

要清楚的是,这只会select三明治和体类的p标签。

要find交集中的任何一个类(不是交集,但是联合),可以给class_关键字参数(从4.1.2开始)提供一个列表:

 soup = BeautifulSoup(sdata) class_list = ["stylelistrow"] # can add any other classes to this list. # will find any divs with any names in class_list: mydivs = soup.find_all('div', class_=class_list) 

另外请注意,findAll已经从camelCase重命名为更多Pythonic find_all