2011-11-11 102 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