基本的Python/Beautiful Soup解析
假设我使用了
date = r.find('abbr')
来获取
<abbr class="dtstart" title="2012-11-16T00:00:00-05:00">November 16, 2012</abbr>
我只想打印出 2012年11月16日
,但是如果我尝试
print date.string
我得到的是
AttributeError: 'NoneType' object has no attribute 'string'
我哪里做错了?
更新:这是我的代码 没有一对打印语句能打印出原始字符串,但没有注释的那些能得到正确的标签
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("some-url-path")
soup = BeautifulSoup(page)
calendar = soup.find('table',{"class" : "vcalendar ical"})
for r in calendar.findAll('tr'):
# print ''.join(r.findAll('abbr',text=True))
# print ''.join(r.findAll('strong',text=True))
print r.find('abbr')
print r.find('strong')
2 个回答
0
这个错误信息的意思是 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
3
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')])
这个方法?