环境: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
答案 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())