2011-11-11 17 views
3

は、私はちょうどNovember 16, 2012を印刷したいが、私は基本パイソン/美しいスープ解析

print date.string 

をしようとした場合、私は

を取得し、私は

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

を取得するために

date = r.find('abbr') 

を使用していると言います

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

私は間違っていますか?

ANSWER:エラーメッセージがdateNoneであることを言っている

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

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

コードを修正するにはどうしたらいいですか? – kevlar1818

+0

要素を検索するときに 'text = True'を使わないでください。必要な要素を見つけ、それらの要素の '.string'プロパティを使います。 – Acorn

0

:ここでは学習の目的のために、私の最後の作業コードです。それがなぜそうであるかを言うのに十分なコードを表示していません。確かに、あなたが最も直接的な方法で掲示コードを使用して動作するはずです:

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 
関連する問題