BeautifulSoup python - 将标记的值保存为字符串

时间:2011-11-23 11:41:23

标签: python html-parsing beautifulsoup

我是BeautifulSoup的新手并且已经搜索了在线docos但是找不到我想要的东西,我只需要将标签的值存储到变量中,以便之后可以将其写入文件

以下是代码:

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 个答案:

答案 0 :(得分:1)

根据您的错误,解决方案似乎是:

f.write(timestamp + ',' + dayTemp[0] + '\n')

答案 1 :(得分:1)

问题是[u'8']是一个list,包含一个对象,一个Unicode字符串。如果要获取该列表中的(唯一)对象,请将其编入索引以获取其第一个条目:

[u'8'][0] # is u'8'

或者您可以将其值与模式匹配:

[a] = [u'8'] # now a is u'8'

答案 2 :(得分:1)

如果您不确定span标记的内容,可以添加以前的答案:

f.write(timestamp + ',' + '<sep>'.join(dayTemp) + '\n')

其中&lt; sep&gt;是您选择的分隔符。