2010-04-11 4 views
1

У меня есть следующий код:Распаковка значение в BeautifulSoup

f = open(path, 'r') 
html = f.read() # no parameters => reads to eof and returns string 

soup = BeautifulSoup(html) 
schoolname = soup.findAll(attrs={'id':'ctl00_ContentPlaceHolder1_SchoolProfileUserControl_SchoolHeaderLabel'}) 
print schoolname 

, который дает:

[<span id="ctl00_ContentPlaceHolder1_SchoolProfileUserControl_SchoolHeaderLabel">A B Paterson College, Arundel, QLD</span>] 

, когда я пытаюсь получить доступ к значению (т.е. «AB Paterson College, Арундель, QLD) с помощью schoolname['value'] я получаю следующее сообщение об ошибке:

print schoolname['value'] TypeError: list indices must be integers, not str 

Что я делаю не так, чтобы получить это значение?

ответ

1

Вы можете использовать contents двигаться вниз по дереву:

>>> for x in schoolname: 
>>> print x.contents 
[u'A B Paterson College, Arundel, QLD']  

Обратите внимание, что содержимое не обязательно должны быть строка - в целом это также может быть больше тегов или смесь строки и тегов ,

1

findAll возвращает список строк, поэтому вы получаете исключение. Я уверен, что ваша проблема решена просто с помощью find вместо findAll. Тогда вы должны быть в состоянии получить доступ к значению вы хотите с:

schoolname['value'] 

Очевидно, что это только «работает», если вам нужно только одно конкретное значение.

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