Beautifulsoup “objeto de lista no tiene atributo” error

Estoy tratando de eliminar las temperaturas de un sitio meteorológico utilizando lo siguiente:

import urllib2 from BeautifulSoup import BeautifulSoup f = open('airport_temp.tsv', 'w') f.write("Location" + "\t" + "High Temp (F)" + "\t" + "Low Temp (F)" + "\t" + "Mean Humidity" + "\n" ) eventually parse from http://www.wunderground.com/history/airport/\w{4}/2012/\d{2}/1/DailyHistory.html for x in range(10): locationstamp = "Location " + str(x) print "Getting data for " + locationstamp url = 'http://www.wunderground.com/history/airport/KAPA/2013/3/1/DailyHistory.html' page = urllib2.urlopen(url) soup = BeautifulSoup(page) location = soup.findAll('h1').text locsent = location.split() loc = str(locsent[3,6]) hightemp = soup.findAll('nobr')[6].text htemp = hightemp.split() ht = str(htemp[1]) lowtemp = soup.findAll('nobr')[10].text ltemp = lowtemp.split() lt = str(ltemp[1]) avghum = soup.findAll('td')[23].text f.write(loc + "\t|" + ht + "\t|" + lt + "\t|" + avghum + "\n" ) f.close() 

Desafortunadamente, me sale un error que dice:

 Getting data for Location 0 Traceback (most recent call last): File "airportweather.py", line 18, in  location = soup.findAll('H1').text AttributeError: 'list' object has no attribute 'text' 

He revisado la documentación de BS y Python, pero todavía estoy bastante verde, así que no pude resolverlo. Por favor ayuda a este novato!

El método .findAll() devuelve una lista de coincidencias. Si quería un resultado, use el método .find() lugar. Alternativamente, seleccione un elemento específico como lo hace el rest del código, o repase los resultados:

 location = soup.find('h1').text 

o

 locations = [el.text for el in soup.findAll('h1')] 

o

 location = soup.findAll('h1')[2].text 

Esto es bastante simple. findAll devuelve la lista, así que si está seguro de que solo hay un elemento interesante para usted, entonces: soup.findAll('H1')[0].text debería funcionar