在BeautifulSoup中使用Python中的“renderContents”

时间:2014-01-21 06:46:28

标签: python beautifulsoup

环境:Python 2.7 + BeautifulSoup 4.3.2

以下是原始HTML代码的一部分:

<dl><dt>Newest Item:</dt><dd><span class="NewsTime" title="Southeast in 2007">SE, 2007</span></dd></dl>

我想要的是“SE,2007”。

我的成果是:

from bs4 import BeautifulSoup
import re
import urllib2

url = "http://sample.com"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

NEWS = soup.find_all("span",class_="NewsTime", limit=1) #because there are 2 such the same

for LA in NEWS:
    print LA.renderContents()

有效。但是当我将最后两行更改为:

时,它不起作用
print NEWS.renderContents()

为什么呢?另外,我对原始HTML代码的理解是对吗?

<dl> is the father
<dt> and <dd> are the father’s son
<span> is <dd>’s son

1 个答案:

答案 0 :(得分:1)

就BeautifulSoup而言,NEWS是一个ResultSet。在集合中只有一个结果并不重要 - 它仍然是ResultSet,你不能在ResultSet上调用renderContents()。

find_all()函数总是返回一个bs4.element.ResultSet,包含零个或多个类型bs4.element.Tag的元素 - 你只能在Tag对象上调用renderContents()。

在这种情况下,要保存for循环,您可以在第一行使用零索引:

NEWS = soup.find_all("span",class_="NewsTime", limit=1)[0]

print(NEWS.renderContents())