BeautifulSoup python - сохранить значение тега в виде строки - PullRequest
0 голосов
/ 23 ноября 2011

Я новичок в 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 голос
/ 23 ноября 2011

Проблема в том, что [u'8'] - это list, содержащий один объект, строку Unicode. Если вы хотите получить (единственный) объект в этом списке, вы индексируете его, чтобы получить его первую запись:

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

или вы можете сопоставить его значение с шаблоном:

[a] = [u'8'] # now a is u'8'
1 голос
/ 23 ноября 2011

Чтобы добавить к предыдущим ответам, если вы не уверены в содержании вашего тега span, вы можете использовать:

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

Где - выбранный вами разделитель.

1 голос
/ 23 ноября 2011

По вашей ошибке кажется решение:

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