Извлечение ценности в Beautifulsoup - PullRequest
1 голос
/ 11 апреля 2010

У меня есть следующий код:

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

когда я пытаюсь получить доступ к значению (то есть 'A B Paterson College, Arundel, QLD), используя schoolname['value'], я получаю следующую ошибку:

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

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

Ответы [ 2 ]

2 голосов
/ 11 апреля 2010

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

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

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

1 голос
/ 08 августа 2012

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

schoolname['value']

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...