Основной Python / Красивый Разбор Супа - PullRequest
3 голосов
/ 11 ноября 2011

Скажи, что я использовал

date = r.find('abbr')

чтобы получить

<abbr class="dtstart" title="2012-11-16T00:00:00-05:00">November 16, 2012</abbr>

Я просто хочу напечатать November 16, 2012, но если я попытаюсь

print date.string

Я получаю

AttributeError: 'NoneType' object has no attribute 'string'

Что я делаю не так?

ОТВЕТ: Вот мой последний рабочий код для учебных целей:

soup = BeautifulSoup(page)
calendar = soup.find('table',{"class" : "vcalendar ical"})

dates = calendar.findAll('abbr', {"class" : "dtstart"})
events = calendar.findAll('strong')

for i in range(1,len(dates)-1):
    print dates[i].string + ': ' + events[i].string

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

soup.find('abbr').string должно работать нормально. Должно быть что-то не так с date.

from BeautifulSoup import BeautifulSoup

doc = '<abbr class="dtstart" title="2012-11-16T00:00:00-05:00">November 16, 2012</abbr>'

soup = BeautifulSoup(doc)

for abbr in soup.findAll('abbr'):
    print abbr.string

Результат:

November 16, 2012

Обновление на основе кода, добавленного к вопросу:

Вы не можете использовать такой параметр text.

http://www.crummy.com/software/BeautifulSoup/documentation.html#arg-text

текст - это аргумент, который позволяет вам искать объекты NavigableString вместо тегов

Либо вы ищете текстовые узлы, либо вы ищете теги. У текстового узла не может быть имени тега.

Может быть, вы хотите ''.join([el.string for el in r.findAll('strong')])?

0 голосов
/ 11 ноября 2011

В сообщении об ошибке говорится, что date равно None. Вы не показали достаточно кода, чтобы сказать, почему это так. Действительно, использование кода, размещенного вами самым простым способом, должно работать:

import BeautifulSoup

content='<abbr class="dtstart" title="2012-11-16T00:00:00-05:00">November 16, 2012</abbr>'
r=BeautifulSoup.BeautifulSoup(content)
date=r.find('abbr')
print(date.string)
# November 16, 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...