¿Cómo extraer datos meteorológicos de Google en Python?

En este artículo, veremos cómo extraer datos meteorológicos de Google. Google no tiene su propia API meteorológica, obtiene datos de weather.com y los muestra cuando busca en Google. Entonces, rasparemos los datos de Google.

Módulo necesario:

Requests: Requests le permite enviar requests HTTP/1.1 con mucha facilidad. Este módulo tampoco viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.

pip install requests

bs4: Beautiful Soup es una biblioteca que facilita extraer información de páginas web. Ya sea una página HTML o XML, que luego se puede usar para iterar, buscar y modificar los datos dentro de ella.

Acercarse:

  • Importar el módulo
  • Introduzca el nombre de la ciudad con la URL
"https://www.google.com/search?q="+"weather"+{cityname}
  • Hacer una instancia de requests y pasar la URL
  • Obtenga los datos sin procesar.
  • Extraiga los datos requeridos de la sopa.
  • Finalmente, imprima los datos requeridos.

Implementación paso a paso del código:

Paso 1: Importe las requests y la biblioteca bs4

Python3

# importing the library
import requests
from bs4 import BeautifulSoup

Paso 2: Cree una URL con el nombre de la ciudad ingresada y pásela a la función de obtención.

Python3

# enter city name
city = "lucknow"
 
# create url
url = "https://www.google.com/search?q="+"weather"+city
 
# requests instance
html = requests.get(url).content
 
# getting raw data
soup = BeautifulSoup(html, 'html.parser')

Paso 3: Soup devolverá un montón de datos con etiquetas HTML. Por lo tanto, a continuación se muestra una parte de los datos de los cuales obtendremos todos los datos necesarios con la ayuda de la función de búsqueda y pasando el nombre de la etiqueta y el nombre de la clase.

<div class=”kvKEAb”><div><div><div class=”BNeawe iBp4i AP7Wnd”><div><div class=”BNeawe 
iBp4i AP7Wnd”>13 °C</div></div></ div></div></div><div><div><div class=”BNeawe tAd8D AP7Wnd”> 
<div><div class=”BNeawe tAd8D AP7Wnd”>Sábado 11:10 a. m.

Python3

# get the temperature
temp = soup.find('div', attrs={'class': 'BNeawe iBp4i AP7Wnd'}).text
 
# this contains time and sky description
str = soup.find('div', attrs={'class': 'BNeawe tAd8D AP7Wnd'}).text
 
# format the data
data = str.split('\n')
time = data[0]
sky = data[1]

Paso 4: aquí list1 contiene todas las etiquetas div con un nombre de clase particular y el índice 5 de esta lista tiene todos los demás datos requeridos.

Python3

# list having all div tags having particular clas sname
listdiv = soup.findAll('div', attrs={'class': 'BNeawe s3v9rd AP7Wnd'})
 
# particular list with required data
strd = listdiv[5].text
 
# formatting the string
pos = strd.find('Wind')
other_data = strd[pos:]

Paso 5: Imprimiendo todos los datos

Python3

# printing all the data
print("Temperature is", temp)
print("Time: ", time)
print("Sky Description: ", sky)
print(other_data)

Producción:

A continuación se muestra la implementación completa:

Python3

# importing library
import requests
from bs4 import BeautifulSoup
 
# enter city name
city = "lucknow"
 
# creating url and requests instance
url = "https://www.google.com/search?q="+"weather"+city
html = requests.get(url).content
 
# getting raw data
soup = BeautifulSoup(html, 'html.parser')
temp = soup.find('div', attrs={'class': 'BNeawe iBp4i AP7Wnd'}).text
str = soup.find('div', attrs={'class': 'BNeawe tAd8D AP7Wnd'}).text
 
# formatting data
data = str.split('\n')
time = data[0]
sky = data[1]
 
# getting all div tag
listdiv = soup.findAll('div', attrs={'class': 'BNeawe s3v9rd AP7Wnd'})
strd = listdiv[5].text
 
# getting other required data
pos = strd.find('Wind')
other_data = strd[pos:]
 
# printing all data
print("Temperature is", temp)
print("Time: ", time)
print("Sky Description: ", sky)
print(other_data)

Producción:

Publicación traducida automáticamente

Artículo escrito por adityaprasad1308 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *