Я использую следующий код (слегка модифицированный из раннего примера «Визуализировать этот» Натан Яу, чтобы очистить метеорологические данные с сайта WUnderGround. Как вы можете видеть, python захватывает числовые данные из элемента с именем класса «wx-data».Как использовать beautifulsoup, когда элемент HTML не имеет имени класса?
Однако я также хотел бы получить среднюю влажность от DailyHistory.htmml. Проблема в том, что не все элементы «span» имеют имя класса, что имеет место для ячейки средней влажности. Как я могу выбрать эту конкретную ячейку с помощью BeautifulSoup и кода ниже?
(Вот пример страницы, которая Царапины - ударилась в режим разработчика и поиск «WX-данных», чтобы увидеть элемент «пролет» на который ссылается:
http://www.wunderground.com/history/airport/LAX/2002/1/1/DailyHistory.html)
import urllib2
from BeautifulSoup import BeautifulSoup
year = 2004
#create comma-delim file
f = open(str(year) + '_LAXwunder_data.txt','w')
#iterate through month and day
for m in range(1,13):
for d in range (1,32):
#Chk if already gone through month
if (m == 2 and d > 28):
break
elif (m in [4,6,9,11]) and d > 30:
break
# open wug url
timestamp = str(year)+'0'+str(m)+'0'+str(d)
print 'Getting data for ' + timestamp
url = 'http://www.wunderground.com/history/airport/LAX/'+str(year) + '/' + str(m) + '/' + str(d) + '/DailyHistory.html'
page = urllib2.urlopen(url)
#Get temp from page
soup = BeautifulSoup(page)
#dayTemp = soup.body.wx-data.b.string
dayTemp = soup.findAll(attrs = {'class':'wx-data'})[5].span.string
#Format month for timestamp
if len(str(m)) < 2:
mStamp = '0' + str(m)
else:
mStamp = str(m)
#Format day for timestamp
if len(str(d)) < 2:
dStamp = '0' + str(d)
else:
dStamp = str(d)
#Build timestamp
timestamp = str(year)+ mStamp + dStamp
#Wrtie timestamp and temp to file
f.write(timestamp + ',' + dayTemp +'\n')
#done - close
f.close()
из любопытства, почему вы используете BeautifulSoup версии 3, а не 4 версии? Вы хотите 'pip install beautifulsoup4' и использовать' from bs4 import BeautifulSoup' вместо этого. –
Наверное, потому что книга с 2011 года :) – d8aninja