如何按类查找元素
我无法使用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
。