CodeGym /Cursos /Python SELF PT /Automatização de tarefas com base no tempo para coleta re...

Automatização de tarefas com base no tempo para coleta regular de dados

Python SELF PT
Nível 40 , Lição 1
Disponível

1. Trabalhando com uma API de clima

Agora que já pegamos o básico, vamos dar uma olhada em um cenário realista. Imagine que precisamos coletar dados sobre o clima a cada 30 minutos. Para isso, usaremos uma API para obter dados meteorológicos. Claro, para fins de aprendizado, o uso de uma API real pode ter limitações, então vamos imaginar como isso poderia ser.

Obtendo o clima atual com a OpenWeather API

Este exemplo mostra como usar requests para obter dados do clima em uma cidade específica, usando a API OpenWeather.

Python

import schedule
import time
import requests

def fetch_weather(city):
    api_key = "YOUR_API_KEY"  # Substitua pela sua chave de API do OpenWeather
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"

    try:
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        temperature = data["main"]["temp"]
        weather_description = data["weather"][0]["description"]
        print(f"Temperatura atual em {city}: {temperature}°C")
        print(f"Descrição do clima: {weather_description}")
    except requests.exceptions.RequestException as e:
        print(f"Erro ao obter dados meteorológicos: {e}")

def fetch_weather_of_london():
    fetch_weather("London")

# Agendamento da tarefa a cada 30 minutos
schedule.every(30).minutes.do(fetch_weather_of_london)

while True:
    schedule.run_pending()
    time.sleep(1)

Aqui enviamos um GET request para a API OpenWeather para obter o clima atual de uma cidade específica. No JSON de resposta extraímos a temperatura e descrição do clima, que são exibidos na tela. Não se esqueça de substituir YOUR_API_KEY pela sua chave de API.

Obtendo a taxa de câmbio atual com uma API

Neste exemplo, usaremos requests para obter a taxa de câmbio atual via API.

Python

import schedule
import time
import requests

def fetch_exchange_rate():
    url = "https://api.exchangerate-api.com/v4/latest/USD"
    try:
        response = requests.get(url)
        response.raise_for_status()  # Verificar se a requisição foi bem-sucedida
        data = response.json()
        usd_to_eur = data["rates"]["EUR"]
        print(f"Taxa de câmbio atual de USD para EUR: {usd_to_eur}")
    except requests.exceptions.RequestException as e:
        print(f"Ocorreu um erro ao obter os dados: {e}")

# Agendamento da tarefa a cada 10 minutos
schedule.every(10).minutes.do(fetch_exchange_rate)

while True:
    schedule.run_pending()
    time.sleep(1)

Aqui enviamos um GET request para a API de taxa de câmbio e obtemos os dados em formato JSON. O câmbio de USD para EUR é extraído da resposta JSON e exibido na tela. Esse script pode ser adaptado para coletar dados de outros pares de moedas, mudando a chave em data["rates"].

Com esse script, podemos coletar constantemente dados sobre clima e câmbio. Bem legal para começar, né?

Cenários reais de uso

Automatizar coleta de dados pode ser útil em vários casos:

  • Monitoramento do estado de servidores: Verificações automáticas do estado do servidor podem identificar e alertar sobre problemas antes que eles ocorram.
  • Coleta de dados de redes sociais: Análise constante de tendências e menções de marcas.
  • Monitoramento de taxas de câmbio: Alterações na taxa de câmbio podem ser úteis para negócios ou demandas pessoais.

2. Exemplo de coleta automatizada de dados web

E se quisermos coletar dados de uma página da web? Por exemplo, verificar regularmente notícias novas. Para isso, entra em cena o BeautifulSoup e o requests.

Coleta de dados de uma página web

Suponha que temos um site do qual queremos coletar manchetes de notícias. É assim que podemos fazer isso:

Python

import requests
from bs4 import BeautifulSoup

def fetch_news():
    response = requests.get("http://example.com/news")
    soup = BeautifulSoup(response.content, 'html.parser')
    for headline in soup.find_all('h2', class_='news'):
        print(headline.text)

schedule.every().hour.do(fetch_news)

while True:
    schedule.run_pending()
    time.sleep(1)

Nesse exemplo, podemos ver que a cada 60 minutos nosso script verificará a página da web e exibirá as manchetes das notícias. Isso simplifica o processo de obter informações atualizadas.

Coleta de manchetes de notícias de um site

Nesse exemplo, usaremos requests para carregar a página HTML e BeautifulSoup para analisar as manchetes.

Python

import requests
from bs4 import BeautifulSoup

def fetch_news_headlines():
    url = "https://www.bbc.com/news"
    try:
        response = requests.get(url)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'html.parser')
        
        headlines = soup.find_all('h3')  # Procurando todas as tags <h3> (onde geralmente estão as manchetes)
        print("Últimas manchetes de notícias da BBC:")
        for headline in headlines[:5]:  # Pegando as primeiras 5 manchetes
            print("-", headline.get_text(strip=True))
    except requests.exceptions.RequestException as e:
        print(f"Erro ao obter os dados: {e}")

fetch_news_headlines()

Aqui carregamos a página do BBC News e, com BeautifulSoup, procuramos todas as tags <h3>, onde estão as manchetes das notícias. Exibimos as primeiras 5 manchetes, removendo espaços extras e caracteres usando strip=True.

Coleta de dados de preços de produtos de uma loja online

Esse exemplo mostra como extrair dados de preços de produtos de um site de loja online (como a Amazon ou outra loja). Usamos requests para fazer a requisição à página e BeautifulSoup para analisar os preços.

Python

import requests
from bs4 import BeautifulSoup

def fetch_product_price(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
    }
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, 'html.parser')
        product_name = soup.find('span', {'id': 'productTitle'}).get_text(strip=True)
        price = soup.find('span', {'class': 'a-price-whole'}).get_text(strip=True)
        
        print(f"Produto: {product_name}")
        print(f"Preço: {price} R$")
    except requests.exceptions.RequestException as e:
        print(f"Erro ao obter os dados: {e}")
    except AttributeError:
        print("Não foi possível encontrar informações sobre o produto ou preço")

# Exemplo de link para o produto
fetch_product_price("https://www.amazon.com/dp/B08N5WRWNW")

Nesse exemplo, enviamos um GET request com um cabeçalho User-Agent para evitar bloqueios. Em seguida, usando BeautifulSoup, procuramos o nome do produto pelo seu id="productTitle" e o preço do produto pelo atributo de classe a-price-whole. Usamos strip=True para remover espaços extras.

1
Tarefa
Python SELF PT, nível 40, lição 1
Bloqueado
Coleta automatizada de dados meteorológicos
Coleta automatizada de dados meteorológicos
2
Tarefa
Python SELF PT, nível 40, lição 1
Bloqueado
Automatização da coleta de informações sobre taxas de câmbio
Automatização da coleta de informações sobre taxas de câmbio
3
Tarefa
Python SELF PT, nível 40, lição 1
Bloqueado
Coleta de manchetes de notícias usando BeautifulSoup
Coleta de manchetes de notícias usando BeautifulSoup
4
Tarefa
Python SELF PT, nível 40, lição 1
Bloqueado
Verificação automatizada de preços de produtos
Verificação automatizada de preços de produtos
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION