我在使用Beautifulsoup解析具備「 class」屬性的HTML元素時遇到了麻煩。 代碼看起來像這樣 python
soup = BeautifulSoup(sdata) mydivs = soup.findAll('div') for div in mydivs: if (div["class"] == "stylelistrow"): print div
腳本完成後的同一行出現錯誤。 spa
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'
我如何擺脫這個錯誤? code
直接的方法是: 文檔
soup = BeautifulSoup(sdata) for each_div in soup.findAll('div',{'class':'stylelist'}): print each_div
確保使用findAll的大小寫,而不是findall的大小寫 get
這對我有用: it
for div in mydivs: try: clazz = div["class"] except KeyError: clazz = "" if (clazz == "stylelistrow"): print div
從文檔中: io
從Beautiful Soup 4.1.2開始,您可使用關鍵字參數 class_
經過CSS類進行搜索 : beautifulsoup
soup.find_all("a", class_="sister")
在這種狀況下將是: class
soup.find_all("div", class_="stylelistrow")
它也適用於: lambda
soup.find_all("div", class_="stylelistrowone stylelistrowtwo")
這對我來講能夠訪問class屬性(在beautifulsoup 4上,與文檔中所說的相反)。 KeyError會返回一個列表,而不是字典。
for hit in soup.findAll(name='span'): print hit.contents[1]['class']
特定於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">