2011-11-11 141 views
3

說,我已經使用基本的Python /美麗的湯解析

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

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

該錯誤消息說,dateNone。你沒有顯示足夠的代碼來說明爲什麼這樣。事實上,使用你最直接的方式發佈的代碼應該工作:

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