Простенький прогноз погоды на Python
Мы будем получать прогноз погоды через поиск google. Определимся с ссылкой:
city = "Москва" # Пока так, потом сделаем ввод города. link = f"https://www.google.com/search?q=погода+в+" # City - это город, который будет вводиться пользователем.
Получаем User-Agent. Для этого переходим в html код через функцию «Просмотреть код». Переходим во вкладку Network. Тыкаем на любой пункт. Листаем вниз и копируем User-Agent

Создаём словарь headers с нашим User-Agent.
headers =
Отправляем get запрос и проверяем код состояния.
responce = requests.get(link, headers=headers) print(response) # При успешном запросе выведится код состояния
Получаем html страничку с помощью bs4.
soup = BeautifulSoup(responce.text, "html.parser") print(soup) # Выводится код html который мы и будем парсить
Теперь посмотрим код в браузере и найдем где лежат нужные нам данные. Для этого нажмём правой кнопкой мыши по браузеру и выберем ‘Просмотреть код’ или ‘Исследовать элемент’ в зависимости от браузера.


Как вы видите информация о температуре находится в class: «wob_t q8U8x» и id: «wob_tm», сейчас нам понадобится только id. Тем же способом выясняем id остальных характеристик.
Теперь нехитрым образом вытаскиваем информацию в консоль.
# Парсим погоду temperature = soup.select("#wob_tm")[0].getText() title = soup.select("#wob_dc")[0].getText() humidity = soup.select("#wob_hm")[0].getText() time = soup.select("#wob_dts")[0].getText() wind = soup.select("#wob_ws")[0].getText() # Выводим на экран print(time) print(title) print(f"Температура: C") print(f"Влажность: ") print(f"Ветер: ")
Теперь давайте обернём наш код в функцию check_weather:
def check_weather(city): # Код который мы написали.
Готово. Создадим точку входа, в которой будем вводить город и вызывать функцию check_weather.
if __name__ == "__main__": city = str(input("Город: ")) check_weather(city=city)

import requests from bs4 import BeautifulSoup def check_weather(city): headers = < "User-Agent" : "Ваш User-Agent" >responce = requests.get(f"https://www.google.com/search?q=погода+в+", headers=headers) print(responce) soup = BeautifulSoup(responce.text, "html.parser") temperature = soup.select("#wob_tm")[0].getText() title = soup.select("#wob_dc")[0].getText() humidity = soup.select("#wob_hm")[0].getText() time = soup.select("#wob_dts")[0].getText() wind = soup.select("#wob_ws")[0].getText() print(time) print(title) print(f"Температура: C") print(f"Влажность: ") print(f"Ветер: ") if __name__ == "__main__": city = str(input("Город: ")) check_weather(city=city)
Создание чат-бота “прогноз погоды” на Python.
Друзья, если вы хотите попробовать свои силы в программировании на Python и создать собственного Telegram-бота, который будет уведомлять вас об актуальной погоде, регистрируйтесь на интенсивный онлайн тренинг Артема Мураховского!
Если вы еще не знакомы с Python, мы поможем легко и быстро войти в разработку на этом языке. Минимум теории, максимум практики — смотрите и делайте с нами! Что будет непонятно, обсудим по ходу.
Кому это будет полезно:
- Новичкам. Если вы никогда не программировали — не проблема. У вас есть шанс сделать свою первую программу на Python и получить опыт практического применения данного языка программирования в создании полезного софта. Тренер поможет вам понять все тонкости создания кода.
- Начинающим Python разработчикам. Вы сможете углубить и применить на практике свои знания языка Python вместе с наставником.
Чему вы научитесь:
- Реализовывать несложную программу на языке Python, которая будет прогнозировать погоду.
- Понимать базовый синтаксис языка Python.
- Работать с запросами.
- Понимать, что такое API и как он работает.
- Создавать ботов для мессенджера Telegram.
- Использовать существующие сервисы для привязки к разрабатываемой программе.
Формат тренинга
Вас ждёт прямой эфир на YouTube с Артемом Мураховским в течение 3 часов с 19:00 до 22:00, общение в чате во время эфира и в специальном телеграм-канале вне эфира. Все примеры и исходные данные также будут в телеграм-канале, к которому вы сможете присоединиться после регистрации.
План:
- Уровни модели сети интернет.
- Что такое библиотеки на Python.
- Что такое API.
- Telegram API.
- Библиотеки для Telegram API.
- Работа с «чистым» API.
Покупай подписку с доступом ко всем курсам и сервисам
Библиотека современных IT знаний в удобном формате
Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.
- Все видеокурсы на 3 месяца
- Тестирование по 10 курсам
- Проверка 5 домашних заданий
- Консультация с тренером 30 мин

Halloween
- Все видеокурсы на 1 год
- Тестирование по 24 курсам
- Проверка 20 домашних заданий
- Консультация с тренером 120 мин
- Скачивание видео уроков
- Возможность приостановки обучения
- Все видеокурсы на 6 месяцев
- Тестирование по 16 курсам
- Проверка 10 домашних заданий
- Консультация с тренером 60 мин
Узнаем текущую погоду и прогноз простеньким скриптом на Python’е
На Хабре есть интересная статья о том, как энтузиасты делают погоду. Энтузиасты делают, а мы воспользуемся плодами их трудов — получим эту самую погоду от OpenWeatherMap.org скриптом на Python’е.
Для получения доступа к сервису погоды придется пройти несложную процедуру регистрации на сайте OpenWeatherMap.org. Сформируем и отправим запрос, разберем ответный пакет в формате JSON, и получим текущую температуру с описанием состояния погоды.

Зарегистрироваться на openweathermap.org совсем несложно, а остальное сделать будет ещё проще.
Регистрация нужна для получения идентифицирующей пользователя строки App Id, состоящей из набора букв и цифр (похоже — только из шестнадцатеричных цифр). Такого вида:
«6d8e495ca73d5bbc1d6bf8ebd52c4». После регистрации нужно зайти в личный кабинет и взять App Id, который там называется «API key».
Формирование строки запроса
Сначала попытаемся найти интересующий нас город в их базе. Строка запроса должна быть примерно такая:
http://api.openweathermap.org/data/2.5/find?q=Petersburg&type=like&APPID=6d8e495ca73d5bbc1d6bf8ebd52c4
В запросе нужно указать нужный город (вместо «Petersburg») и свой App Id (вместо «6d8e495ca73d5bbc1d6bf8ebd52c4». Можно уточнить запрос, указав идентификатор страны после названия города через запятую. Например, так:
http://api.openweathermap.org/data/2.5/find?q=Petersburg,RU&type=like&APPID=6d8e495ca73d5bbc1d6bf8ebd52c4
Собственно запросная строка будет сформирована самой библиотекой requests в функции get, которую используем для отправки запроса:
requests.get("http://api.openweathermap.org/data/2.5/find", params=)
Проверка наличия в базе информации о нужном населенном пункте
План такой. В ответ на сформированный запрос получаем пакет в формате JSON. Разбираем пакет и получаем нужные значения по названиям полей.
import requests s_city = "Petersburg,RU" city_id = 0 appid = "буквенно-цифровой APPID" try: res = requests.get("http://api.openweathermap.org/data/2.5/find", params=) data = res.json() cities = ["<> (<>)".format(d['name'], d['sys']['country']) for d in data['list']] print("city:", cities) city_id = data['list'][0]['id'] print('city_id=', city_id) except Exception as e: print("Exception (find):", e) pass
Запомним числовой идентификатор города city_id для последующего запроса, потому что поставщики сервиса рекомендовали делать запрос не по имени, а по идентификатору.
В ответе может оказаться несколько городов, соответствующих нашему запросу. Кстати, если в запросе указать “Moscow” и убрать страну из строки приведенного в примере запроса, то гарантированно получим несколько строк в списке cities:
city: [‘Moscow (RU)’, ‘Moscow (US)’, ‘Moscow (US)’]
Получение информации о текущей погоде
Осталось только получить искомую информацию о погоде. Если нас не интересуют имперские единицы измерения, то в запросе указываем, что желаем получить метрические единицы: «units=metric». Если описание погоды нужно получить на русском, то указываем «lang=ru».
try: res = requests.get("http://api.openweathermap.org/data/2.5/weather", params=) data = res.json() print("conditions:", data['weather'][0]['description']) print("temp:", data['main']['temp']) print("temp_min:", data['main']['temp_min']) print("temp_max:", data['main']['temp_max']) except Exception as e: print("Exception (weather):", e) pass
Если верить сервису, сейчас (14.11.2016 в 23:20) в Москве:
conditions: небольшой снег
temp: -5.25
temp_min: -6
temp_max: -5
Прогноз на 5 дней
try: res = requests.get("http://api.openweathermap.org/data/2.5/forecast", params=) data = res.json() for i in data['list']: print( i['dt_txt'], ''.format(i['main']['temp']), i['weather'][0]['description'] ) except Exception as e: print("Exception (forecast):", e) pass
Получим такой вывод:
2016-11-24 15:00 -1 7 м/с ЮЗ пасмурно
2016-11-24 18:00 +2 7 м/с З легкий дождь
2016-11-24 21:00 +2 7 м/с З легкий дождь
2016-11-25 00:00 -0 7 м/с З ясно
2016-11-25 03:00 +0 7 м/с З небольшой снегопад
2016-11-25 06:00 -0 6 м/с СЗ слегка облачно
.
Скачать owm-request.py. Чтобы этот скрипт заработал, нужно в первой строке ввести Ваш «API key», полученный при регистрации на OpenWeatherMap.org.
Командная строка, например, такая:
$python owm-request.py Moscow,RU
На сайте OpenWeatherMap есть ещё масса интересного — получение информации по географическим координатам, архив погоды, информация с конкретных метеостанций. Описание всех доступных сервисов можно посмотреть здесь http://openweathermap.org/api
Для работы на Python’е с OpenWeatherMap существует специализированная библиотека pyowm.
Помимо OpenWeatherMap есть другие сайты, предоставляющие аналогичную информацию. Например, WorldWeatherOnline. Доступные API можно посмотреть здесь. Регистрация нужна. Есть библиотека на Python’е: pywwo.
Отдельное спасибо JetBrains за PyCharm.
- Веб-разработка
- Python
- Разработка мобильных приложений
- API
DNDK / weather.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| import requests |
| import time |
| rus = |
| » |
| > |
| par = |
| «lang» : «ru» , |
| «lat» : 53 , |
| «lon» : 30 , |
| «appid» : «84061a2a5ff54b490d63bd38d557b06d» , |
| «units» : «metric» |
| > |
| print ( «Соединение с сервером. » ) |
| r = requests . get ( ‘http://api.openweathermap.org/data/2.5/weather?’ , params = par ) |
| r_hourly = requests . get ( ‘http://api.openweathermap.org/data/2.5/forecast?’ , params = par ) |
| «»» CURRENT «»» |
| print ( «——————-Погода сейчас——————-» ) |
| data = r . json () |
| print ( ‘***********’ , end = » ) |
| descript = data . get ( «weather» )[ 0 ]. get ( «description» ) |
| print ( descript , end = » ) |
| print ( ‘***********’ ) |
| temp = data . get ( «main» ). get ( «temp» ) |
| #temp = round(1.8*(temp-273)+32) |
| #temp = round((5/9)*(temp-32)) |
| print ( «Температура(*C)» , temp ) |
| hum = data . get ( «main» ). get ( «humidity» ) |
| print ( «Влажность» , hum , «%» ) |
| wind_speed = data . get ( «wind» ). get ( «speed» ) |
| print ( ‘Скорость ветра’ , wind_speed ) |
| «»»BY HOURS»»» |
| print ( «——————-На ближайшее время——————-» ) |
| forecast = r_hourly . json (). get ( ‘list’ )[: 5 ] |
| for i in forecast : |
| dt = i . get ( ‘dt_txt’ ) |
| print ( dt , ‘:’ ) |
| print ( «Будет <>» . format ( i . get ( «weather» )[ 0 ]. get ( «description» ))) |
| print ( «Подробно:» ) |
| print ( » Температура:» , i . get ( «main» ). get ( «temp» ), «*C» ) |
| print ( » Влажность:» , i . get ( «main» ). get ( «humidity» ), «%» ) |
| press = int ( i . get ( «main» ). get ( «pressure» )) |
| print ( » Давление(мм.рт.ст):» , press / 133 ) |
| print ( «——————————————————————————» ) |
| print ( «Данные от openweathermap.org» ) |