基本的Python /美丽的汤解析

时间:2011-11-11 02:41:21

标签: python html beautifulsoup

说我用过

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 个答案:

答案 0 :(得分: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

  

text是一个允许您搜索NavigableString对象的参数   而不是标签

要么您正在寻找文本节点,要么正在寻找标签。文本节点不能具有标记名称。

也许你想要''.join([el.string for el in r.findAll('strong')])

答案 1 :(得分: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