Pull to refresh

Простенький прогноз погоды на Python

Level of difficultyEasy

Устанавливаем всё необходимое

  • pip install requests

  • pip install bs4

Импортируем библиотеки

import requests
from bs4 import BeautifulSoup

Пишем основной код

Мы будем получать прогноз погоды через поиск google. Определимся с ссылкой:

city = "Москва" # Пока так, потом сделаем ввод города.

link = f"https://www.google.com/search?q=погода+в+{city}"

# City - это город, который будет вводиться пользователем.

Получаем User-Agent. Для этого переходим в html код через функцию "Просмотреть код". Переходим во вкладку Network. Тыкаем на любой пункт. Листаем вниз и копируем User-Agent

Создаём словарь headers с нашим User-Agent.

headers = {
        "User-Agent" : "Ваш User-Agent"
        }

Отправляем get запрос и проверяем код состояния.

responce = requests.get(link, headers=headers)

print(response) # При успешном запросе выведится код состояния <Response [200]>

Получаем html страничку с помощью bs4.

soup = BeautifulSoup(responce.text, "html.parser")

print(soup) # Выводится код html который мы и будем парсить

Теперь посмотрим код в браузере и найдем где лежат нужные нам данные. Для этого нажмём правой кнопкой мыши по браузеру и выберем 'Просмотреть код' или 'Исследовать элемент' в зависимости от браузера.

Как вы видите информация о температуре находится в class: "wob_t q8U8x" и id: "wob_tm", сейчас нам понадобится только id. Тем же способом выясняем id остальных характеристик.

Температура:

id="wob_tm"

Состояние:

id="wob_dc"

Влажность:

id="wob_hm"

Дата и время:

id="wob_dts"

Ветер:

id="wob_ws"

Теперь нехитрым образом вытаскиваем информацию в консоль.

# Парсим погоду
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"Температура: {temperature}C")
print(f"Влажность: {humidity}")
print(f"Ветер: {wind}")

Теперь давайте обернём наш код в функцию 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=погода+в+{city}", 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"Температура: {temperature}C")
    print(f"Влажность: {humidity}")
    print(f"Ветер: {wind}")

if __name__ == "__main__":
    city = str(input("Город: "))
    check_weather(city=city)

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.