Nhận thông báo thời tiết trực tiếp trên màn hình bằng Python

Các bạn đọc like ủng hộ MUO nhé. Khi bạn mua hàng bằng các liên kết trên trang web của chúng tôi, chúng tôi có thể kiếm được hoa hồng liên kết. Đọc thêm

Tính đơn giản và khả năng thích ứng của Python đã giúp nó trở nên phổ biến trong suốt những năm qua. Bạn có thể dễ dàng truy xuất dữ liệu hữu ích qua internet bằng Python. Sau đó, bạn có thể sử dụng dữ liệu đó để thúc đẩy một ứng dụng thực tế

Tìm hiểu cách tìm dữ liệu thời tiết theo thời gian thực bằng cách sử dụng tìm kiếm trên web và API. Bạn có thể sử dụng dữ liệu được tìm nạp này để phát triển một ứng dụng thời tiết đơn giản

Nhận thông tin chi tiết về thời tiết hiện tại của một thành phố bằng cách sử dụng Web Scraping

Quét web là quá trình trích xuất dữ liệu và nội dung từ một trang web. Tự động tìm nạp dữ liệu từ web mở ra rất nhiều trường hợp sử dụng. Nhưng hầu hết dữ liệu này ở định dạng HTML, bạn cần phân tích cú pháp và kiểm tra để trích xuất dữ liệu liên quan

Bạn có thể trích xuất dữ liệu thời tiết trực tiếp của bất kỳ thành phố nào bằng cách sử dụng tính năng quét web. Thư viện BeautifulSoup của Python là thư viện truy cập để lấy dữ liệu ra khỏi các tệp HTML và XML. Bạn cần cài đặt thư viện BeautifulSoup Python qua pip để bắt đầu quá trình cạo. Chạy lệnh sau trong thiết bị đầu cuối để cài đặt thư viện BeautifulSoup và yêu cầu

 pip install beautifulsoup4 requests 

Sau khi bạn đã cài đặt các thư viện cần thiết, hãy bắt đầu bằng cách nhập chúng vào mã của bạn

Mã được sử dụng trong dự án này có sẵn trong kho lưu trữ GitHub và bạn được sử dụng miễn phí theo giấy phép MIT

 from bs4 import BeautifulSoup
import requests

Tiếp theo, bạn cần cung cấp chi tiết tiêu đề để máy khách và máy chủ có thể truyền thông tin bổ sung với yêu cầu hoặc phản hồi HTTP

 headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

Tạo một hàm, find_weather(), để thực hiện truy vấn tới Google bằng cách sử dụng các yêu cầu. phương thức nhận (). Bạn sẽ sử dụng URL tìm kiếm để nhận thông tin thời tiết của thành phố, sau đó thu thập dữ liệu có ý nghĩa để nhận vị trí, nhiệt độ, thời gian và mô tả thời tiết. Sau đó, sử dụng BeautifulSoup để phân tích phản hồi HTML nhận được

 def find_weather(city_name):
   city_name = city_name.replace(" ", "+")

   try:
       res = requests.get(
           f'https://www.google.com/search?q={city_name}&oq={city_name}&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8', headers=headers)
      
       print("Loading...")

       soup = BeautifulSoup(res.text, 'html.parser')
       location = soup.select('#wob_loc')[0].getText().strip()
       time = soup.select('#wob_dts')[0].getText().strip()
       info = soup.select('#wob_dc')[0].getText().strip()
       temperature = soup.select('#wob_tm')[0].getText().strip()

       print("Location: " + location)
       print("Temperature: " + temperature + "°C")
       print("Time: " + time)
       print("Weather Description: " + info)
   except:
       print("Please enter a valid city name")

Để trích xuất các ID phần tử, hãy thực hiện tìm kiếm trên Google và kiểm tra trang trong trình duyệt của bạn bằng các công cụ web. Bạn cần kiểm tra phần tử để tìm ID của phần tử HTML mà bạn muốn trích xuất dữ liệu

chrome screenshot displaying New Delhi weather data scraping

Tiếp theo, chuyển các ID này vào phương thức select(). Phương thức này chạy bộ chọn CSS đối với tài liệu được phân tích cú pháp và trả về tất cả các phần tử phù hợp. Phương thức getText() trích xuất văn bản từ phần tử HTML. Phương thức strip() xóa mọi ký tự khoảng trắng ở đầu và cuối khỏi văn bản. Khi bạn đã trích xuất một giá trị sạch, bạn có thể lưu trữ nó trong một biến

Cuối cùng, yêu cầu người dùng nhập một thành phố và chuyển nó đến hàm find_weather

 city_name = input("Enter City Name: ")
city_name = city_name + " weather"
find_weather(city_name)

Bây giờ, khi bạn chạy mã, nó sẽ nhắc bạn nhập tên thành phố. Bạn phải nhập tên thành phố hợp lệ để nhận kết quả, nếu không mã sẽ đưa ra một ngoại lệ

New Delhi weather data scraping using python

Nhận thông tin chi tiết về thời tiết hiện tại của một thành phố bằng API OpenWeatherMap

OpenWeatherMap là một dịch vụ trực tuyến, thuộc sở hữu của OpenWeather Ltd. API của nó cung cấp dữ liệu thời tiết toàn cầu bao gồm thời tiết hiện tại, dự báo và dữ liệu trong quá khứ cho bất kỳ vị trí nào. Bậc miễn phí của API OpenWeatherMap cung cấp dữ liệu thời tiết hiện tại với giới hạn 60 cuộc gọi/phút. Bạn cần tạo một tài khoản trên OpenWeatherMap để nhận khóa API của riêng mình

Không đẩy mã có khóa API vào kho lưu trữ công khai vì bất kỳ ai có quyền truy cập vào tệp nguồn của bạn đều có thể xem và đánh cắp khóa của bạn. Trong một ứng dụng sản xuất, hãy xem xét chuyển dữ liệu khóa API sang một. env để tăng cường bảo mật

Truy cập trang web của OpenWeatherMap và tạo một tài khoản miễn phí. Sau khi tạo tài khoản, bạn có thể tìm khóa API của mình trên trang Khóa API của tôi. Bạn có thể sử dụng khóa API mặc định do OpenWeatherMap cung cấp hoặc tạo khóa API của riêng bạn. OpenWeatherMap cung cấp hỗ trợ để tạo bao nhiêu khóa API cần thiết cho các dự án của bạn

OpenWeatherMap My API keys website screenshot

Bây giờ, bạn đã sẵn sàng truy xuất dữ liệu thời tiết trực tiếp

 # Importing libraries
import requests
import json

# Enter your OpenWeatherMap API key here
# DO NOT push it to a public repository
API_Key = "Your_API_Key"

# Provide a valid city name
city_name = input("Enter city name: ")

# Constructing the API URL path
url = f"http://api.openweathermap.org/data/2.5/weather?q={city_name}&appid={API_Key}"

# Making a get request to the API
response = requests.get(url)

# Converting JSON response to a dictionary
res = response.json()

# Uncomment the next line to see all
# data that are fetched from the API
# print(res)

# Checking if the city is found
# If the value of "cod" is not 404,
# that means the city is found
if res["cod"] != "404":
   data = res["main"]

   # Storing the live temperature data
   live_temperature = data["temp"]

   # Storing the live pressure data
   live_pressure = data["pressure"]
   desc = res["weather"]

   # Storing the weather description
   weather_description = desc[0]["description"]
   print("Temperature (in Kelvin scale): " + str(live_temperature))
   print("Pressure: " + str(live_pressure))
   print("Description: " + str(weather_description))

else:
   # If the city is not found,
   # this block of code will be executed
   print("Please enter a valid city name")

Nếu cung cấp khóa API hợp lệ và nhập đúng tên thành phố, bạn sẽ nhận được dữ liệu từ API ở định dạng JSON. Tiếp theo, bạn cần chuyển đổi dữ liệu định dạng JSON này thành đối tượng Python bằng phương thức json() để thực hiện các thao tác tiếp theo. Nếu thành phố được tìm thấy, bạn sẽ phải giải quyết đối tượng dict (res) để trích xuất thông tin cần thiết

New Delhi weather data from OpenWeatherMap API

Phát triển ứng dụng thời tiết bằng cách sử dụng dữ liệu thời tiết trực tiếp

Bây giờ bạn đã học cách tìm nạp dữ liệu trực tiếp bằng API OpenWeatherMap, bạn đã sẵn sàng để phát triển một ứng dụng thời tiết đơn giản bằng cách sử dụng nó. Xây dựng một ứng dụng thời tiết có thể giúp bạn áp dụng những gì bạn biết và trau dồi kỹ năng Python của bạn

Bắt tay vào các dự án thực tế có thể giúp bạn trở thành một nhà phát triển tốt hơn. Bạn có thể phát triển một số dự án Python khác như hệ thống đăng nhập, ứng dụng đố vui hoặc trình rút ngắn URL để củng cố kỹ năng phát triển Python của bạn