2012-12-14 49 views
1

我試圖解析HTML文檔,但BS4無法解析特定標籤屬性:BeautifulSoup 4解析屬性的錯誤

<select class="inputNormal" id="TipoImmobileDaNonImportare" name="TipoImmobileDaNonImportare" style="width:100%"> 
      <option value=""></option> 
      <option value="unità immobiliare urbana">unità immobiliare urbana</option>    
      <option value="particella terreni">particella terreni</option> 
</select> 

當我打印,錯誤

AttributeError: 'tuple' object has no attribute 'items'` 
the tag and attribute i print:`select: (u'style', u'class', u'name')` 
instead of (for example): `input: {u'type': u'hidden', u'name': u'Immobile_Note', u'value': u'Ubicazione occupazione', u'id': u'Immobile_Note'}` 

更新: 如果我嘗試soup.find_all(attrs= {'id' : 'somevalue' })它失敗,因爲嘗試訪問樹的所有屬性!

如果我嘗試:

s = BeautifulSoup("""<select class="inputNormal" id="TipoImmobileDaNonImportare" name="TipoImmobileDaNonImportare" style="width:100%"> 
<option value=""></option> 
<option value="unità immobiliare urbana">unità immobiliare urbana</option> 
<option value="particella terreni">particella terreni</option> 
</select>""") 

解析器正確檢測到它:

select: {'id': 'TipoImmobileDaNonImportare', 'style': 'width:100%', 'class': ['inputNormal'], 'name': 'TipoImmobileDaNonImportare'} 

我嘗試用LXML解析器和html5lib解析器解析它,但結果是一樣的。

感謝您的回覆。

編輯: 感謝阿曼達,但是在我的代碼中有一個錯誤,我試着在tag.attrs存儲一個簡單的對象,因爲這段代碼是從bs3移植到bs4! 謝謝。

+0

在這種情況下你想分析或訪問什麼? – Amanda

回答

1

我不是很確定你想在這裏與美麗的湯訪問什麼,但如果你想在爲選擇的屬性或選項,你可以這樣做:

html = """<select class="inputNormal" id="TipoImmobileDaNonImportare" name="TipoImmobileDaNonImportare" style="width:100%"> 
     <option value=""></option> 
     <option value="unità immobiliare urbana">unità immobiliare urbana</option> 
     <option value="particella terreni">particella terreni</option></select>""" 

soup = BeautifulSoup(html) 

您可以顯示的屬性的第一個「選擇」帶:

print soup.find('select').attrs 

或者與顯示的所有選項的屬性:

for option in soup.find_all('option'): 
    print option.attrs 

或者,如果你正在尋找可用的物品的名稱,使用方法:

for option in soup.find_all('option'): 
    print option.text 

,或者如果您想要的選項值,而不是顯示的文本,使用:

for option in soup.find_all('option'): 
    print option['value'] 

如果沒有按沒有幫助,也許你可以舉一個你期望的輸出的例子