2012-12-14 3 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'}` 

UPDATE: , если я попробую 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 анализатором, но результат тот же.

Спасибо за любые ответы.

EDIT: спасибо Аманде, но произошла ошибка в моем коде, я пытаюсь сохранить в tag.attrs объект touple, потому что этот код переносит с bs3 на bs4! Спасибо.

+0

Что вы пытаетесь разобрать или получить доступ в этом случае? – Amanda

ответ

1

Я не совсем уверен, что вы пытаетесь получить доступ с Beautiful Soup, но если вы хотите получить на атрибуты для выбора или опций, вы можете сделать что-то вроде:

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'] 

Если это Безразлично «Помогите, может быть, вы могли бы привести пример вывода, которого вы ожидаете

Смежные вопросы