BeautifulSoup Python - 将标签值保存为字符串
我刚开始学习BeautifulSoup,查了很多网上的文档,但还是找不到我想要的。我只是想把一个标签的值存到一个变量里,以便之后可以写入文件。
这是我的代码:
import urllib2
from BeautifulSoup import BeautifulSoup
f = open('C:\test.txt', 'w')
url = "http://www.wunderground.com/history/airport/KBUF/2011/1/1/DailyHistory.html?MR=1"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page)
table = soup.find('table', id="historyTable").tbody
rows = table.findAll('tr') #get all rows
cols = rows[1].findAll('td') #get 2nd row
meanTemp = cols[1] # get 2nd column
alt = meanTemp('span')[1]
print alt
dayTemp = alt.contents
print dayTemp
f.write(timestamp + ',' + dayTemp + '\n')
运行后打印出这个:
<span class="b">8</span>
[u'8']
然后出现了这个错误:
f.write(timestamp + ',' + dayTemp + '\n')
TypeError: cannot concatenate 'str' and 'list' objects
也就是说,我希望 print dayTemp
这一行能打印出 8
,而不是 [u'8']
。
3 个回答
1
如果你对你的标签里面的内容不太确定,可以使用下面的代码:
f.write(timestamp + ',' + '<sep>'.join(dayTemp) + '\n')
这里的<sep>是你自己选择的分隔符。
1
问题在于 [u'8']
是一个包含一个对象的 list
,这个对象是一个Unicode字符串。如果你想获取这个列表中的(唯一的)对象,你可以通过索引来获取它的第一个元素:
[u'8'][0] # is u'8'
或者你也可以通过模式匹配的方式来提取它的值:
[a] = [u'8'] # now a is u'8'
1
根据你的错误信息,似乎解决办法是:
f.write(timestamp + ',' + dayTemp[0] + '\n')