Программирование и научные вычисления на языке Python/§14: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 180:
 
 
Чтобы заполучить нужную информацию, нам необходимо выполнить следующую последовательность действий: прочитать построчно файл; найти по ключевым словам <tt>Current conditions</tt> и <tt>forecast-temp</tt> строки, в которых они содержатся; требуемые данные расположены в следующих за ними строках, с помощью строковой функции <tt>strip()</tt> отрезаем ненужные пробелы по краям строк; воспользовавшись срезами вырезаем нужную нам подстроку, убирая из нее div-теги и все лишнее. Получаем следующий цикл:
 
 
Строка 210:
lines = infile.readlines()
# [...] здесь наш цикл
 
infile.close()
Строка 216:
</source>
 
 
Теперь, один раз повозившись с исходным кодом web-страницы, мы можем использовать его по полной для любых аналогичных страниц данного сайта, то есть, например, узнавать погоду в любых желаемых городах сразу вместе, не переходя специально на их страницы, что в случае ежедневной необходимости займет гораздо больше времени, чем запуск нашей программы.
 
Например, представим, что кто-то живет в Ленинградской области вблизи Васкелово и не знает что выбрать: посидеть сегодня дома, поехать гулять с друзьями в Петербург или поехать на Ладогу в Приозерск. Для этого человека у нас уже есть программа, легко модифицированная из предыдущей с помощью хранения ссылок в виде словаря:
 
 
<source lang="python">
import urllib
 
cities = {
'St-Petersburg':
'http://weather.yahoo.com/russia/st.-peterburg/st.-petersburg-2123260/',
'Priozersk':
'http://weather.yahoo.com/russia/leningradskaya-oblast/priozersk-2123030/',
'Vaskelovo':
'http://weather.yahoo.com/russia/leningradskaya-oblast/vaskelovo-2124169/',
}
 
def get_data(url):
urllib.urlretrieve(url=url, filename='tmp_weather.html')
 
infile = open('tmp_weather.html')
lines = infile.readlines()
for i in range(len(lines)):
line = lines[i] # короткая форма
if 'Current conditions' in line:
without_space = lines[i+1].strip()
weather = without_space[18:-6]
if 'forecast-temp' in line:
without_space = lines[i+1].strip()
ftemp = float(without_space[18:-12])
temperature = round((ftemp - 32)/1.8)
break # все что нужно найдено
infile.close()
print "In %s it's %s and %d degrees." % (city, weather.lower(), temperature)
 
for city in cities: get_data(cities[city])
</source>