Every day, I need to manually extract the central image from two URLs. I decided to automate this process and, with the help of ChatGPT, I have the following code
# %%
from datetime import datetime, timedelta
import requests
from bs4 import BeautifulSoup
import os
def extract_image_url(page_url, img_selector):
response = requests.get(page_url)
response.raise_for_status() # Verifica se o download foi bem-sucedido
soup = BeautifulSoup(response.text, 'html.parser')
# Encontra a imagem usando o seletor CSS
img_tag = soup.select_one(img_selector)
if img_tag and 'src' in img_tag.attrs:
return img_tag['src']
else:
raise ValueError("Imagem não encontrada ou seletor CSS incorreto")
def download_image(img_url, save_path):
response = requests.get(img_url)
response.raise_for_status()
with open(save_path, 'wb') as f:
f.write(response.content)
print(f"Imagem salva em: {save_path}")
#%%
today = datetime.now().strftime('%Y%m%d')
# Calcular a data 16 dias à frente
dia_ahead = (datetime.now() + timedelta(days=16)).strftime('%Y%m%d')
# Base da URL
url_base = "https://weather.us/model-charts/standard/"
# URLs específicas
url_today_00z = f"{url_base}{today}00"
url_today_06z = f"{url_base}{today}06"
# URLs completas
url_today_00z_complete = f"{url_today_00z}/brazil/accumulated-precipitation/{dia_ahead}-0000z.html"
url_today_06z_complete = f"{url_today_06z}/brazil/accumulated-precipitation/{dia_ahead}-0060z.html"
print("\nURL Today 00z Complete:")
print(url_today_00z_complete)
print("\nURL Today 06z Complete:")
print(url_today_06z_complete)
urls = [url_today_00z_complete, url_today_06z_complete]
img_selector = "#click-overlay"
#%% Extrair e baixar a imagem de cada URL
for url in urls:
try:
img_url = extract_image_url(url, img_selector)
if not img_url.startswith('http'):
img_url = f'https://weather.us{img_url}'
save_path = os.path.join(os.getcwd(), os.path.basename(img_url))
download_image(img_url, save_path)
except Exception as e:
print(f"Erro ao processar {url}: {e}")
To be clear, I want to extract images similar to this one
Could someone help me correct this code?