基本的Python/Beautiful Soup解析

3

假设我使用了

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个回答

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

结果:

2012年11月16日

问题代码更新:

你不能像那样使用text参数。

http://www.crummy.com/software/BeautifulSoup/documentation.html#arg-text

text是一个参数,让您可以搜索NavigableString对象而不是标签

无论是寻找文本节点还是寻找标签,文本节点都不能有标签名称。

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


在查找元素时,不要使用 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接