Помогите решить задачу на питоне
На сайте https://www.gismeteo.ru/weather-moscow-4368/ выберите город, в котором вы проживаете, на полученной странице соберите следующие данные:
В блоке почасовой погоды для каждого временного промежутка получить:
Данные о солнце и луне:
Используйте обработку исключений, чтобы ваша программа работала корректно на каждой странице, так как некоторые поля могут отсутствовать. Данные необходимо собрать на 5 дней вперед и сохранить в CSV или JSON файл.
Информатика 11 класс Программирование на Python питон задача на питоне сбор данных Погода температура характеристика погоды обработка исключений CSV JSON программирование Новый
Для решения данной задачи мы будем использовать язык программирования Python и несколько библиотек, которые помогут нам в веб-скрейпинге и работе с данными. Основные шаги, которые нам нужно будет выполнить, следующие:
Шаг 1: Установка необходимых библиотек
Для начала убедитесь, что у вас установлены следующие библиотеки:
Если они не установлены, вы можете установить их с помощью команды:
pip install requests beautifulsoup4 pandas
Шаг 2: Отправка запроса и получение HTML-кода страницы
Сначала мы отправим запрос к нужной странице и получим HTML-код:
import requests from bs4 import BeautifulSoup url = 'https://www.gismeteo.ru/weather-moscow-4368/' response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser')
Шаг 3: Извлечение нужных данных
Теперь нам нужно извлечь необходимые данные. Мы будем использовать методы BeautifulSoup для поиска нужных элементов на странице. Например:
# Извлечение текущей даты и дня недели date = soup.find('div', class_='current-weather__date').text.strip() day_of_week = soup.find('div', class_='current-weather__day-of-week').text.strip() # Извлечение температур и характеристик погоды min_temp = soup.find('span', class_='temp__min').text.strip() max_temp = soup.find('span', class_='temp__max').text.strip() weather_description = soup.find('div', class_='current-weather__description').text.strip()
Шаг 4: Извлечение почасовой погоды
Теперь мы извлечем данные о почасовой погоде. Для этого нужно найти соответствующий блок и пройтись по временным промежуткам:
hourly_data = [] hourly_blocks = soup.find_all('div', class_='hourly-weather__item') for block in hourly_blocks: try: time = block.find('div', class_='hourly-weather__time').text.strip() hourly_weather = block.find('div', class_='hourly-weather__description').text.strip() temperature = block.find('span', class_='hourly-weather__temp').text.strip() wind_gusts = block.find('span', class_='hourly-weather__wind').text.strip() precipitation = block.find('span', class_='hourly-weather__precipitation').text.strip() hourly_data.append({ 'time': time, 'weather': hourly_weather, 'temperature': temperature, 'wind_gusts': wind_gusts, 'precipitation': precipitation }) except AttributeError: continue # Если какого-то элемента нет, пропускаем этот блок
Шаг 5: Данные о солнце и луне
Теперь нам нужно собрать данные о солнце и луне. Это можно сделать аналогичным образом:
day_length = soup.find('div', class_='sun-info__day-length').text.strip() moon_phase = soup.find('div', class_='moon-info__phase').text.strip()
Шаг 6: Сохранение данных в CSV или JSON
Теперь, когда у нас есть все данные, мы можем сохранить их в файл. Например, используя библиотеку pandas:
import pandas as pd data = { 'date': date, 'day_of_week': day_of_week, 'min_temp': min_temp, 'max_temp': max_temp, 'weather_description': weather_description, 'hourly_data': hourly_data, 'day_length': day_length, 'moon_phase': moon_phase } df = pd.DataFrame(data) df.to_csv('weather_data.csv', index=False) # Сохранение в CSV # df.to_json('weather_data.json', orient='records') # Сохранение в JSON
Шаг 7: Обработка исключений
Не забудьте добавить обработку исключений на каждом шаге, чтобы ваша программа могла корректно обрабатывать случаи, когда определенные данные отсутствуют.
Заключение
Теперь у вас есть полное представление о том, как собрать данные с сайта gismeteo.ru и сохранить их в файл. Не забудьте протестировать ваш код и убедиться, что он работает корректно для различных городов и погодных условий.