
Создание интерактивного веб-скрепера погоды в Google Colab
В этом руководстве мы создадим проект веб-скрепинга, который будет извлекать данные о прогнозе погоды в реальном времени из Национальной метеорологической службы США. Вы научитесь настраивать свою среду, писать скрипт на Python с использованием BeautifulSoup и requests, а также интегрировать интерактивный интерфейс с помощью ipywidgets.
Установка необходимых библиотек
!pip install beautifulsoup4 ipywidgets pandas
Сначала мы устанавливаем три основные библиотеки: BeautifulSoup4 для парсинга HTML-контента, ipywidgets для создания интерактивных элементов и pandas для манипуляции и анализа данных.
Импорт библиотек
import requests
from bs4 import BeautifulSoup
import csv
from google.colab import files
import ipywidgets as widgets
from IPython.display import display, clear_output, FileLink
import pandas as pd
Импортируем все необходимые библиотеки для создания интерактивного веб-скрепера. Это включает в себя requests для обработки HTTP-запросов, BeautifulSoup для парсинга HTML и csv для работы с CSV-файлами.
Функция для сбора данных о погоде
def scrape_weather():
url = 'https://forecast.weather.gov/MapClick.php?lat=37.7772&lon=-122.4168'
response = requests.get(url)
if response.status_code != 200:
return None
soup = BeautifulSoup(response.text, 'html.parser')
seven_day = soup.find(id="seven-day-forecast")
forecast_items = seven_day.find_all(class_="tombstone-container")
weather_data = []
for forecast in forecast_items:
period = forecast.find(class_="period-name").get_text() if forecast.find(class_="period-name") else ''
short_desc = forecast.find(class_="short-desc").get_text() if forecast.find(class_="short-desc") else ''
temp = forecast.find(class_="temp").get_text() if forecast.find(class_="temp") else ''
weather_data.append({
"period": period,
"short_desc": short_desc,
"temp": temp
})
return weather_data
С помощью этой функции мы получаем прогноз погоды для Сан-Франциско. Функция делает HTTP-запрос к странице прогноза, парсит HTML с помощью BeautifulSoup и извлекает детали прогноза.
Сохранение данных в CSV
def save_to_csv(data, filename="weather.csv"):
with open(filename, "w", newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=["period", "short_desc", "temp"])
writer.writeheader()
writer.writerows(data)
return filename
Эта функция принимает собранные данные о погоде и записывает их в CSV-файл. Она открывает файл в режиме записи с кодировкой UTF-8 и использует DictWriter для записи данных.
Создание интерактивного интерфейса
out = widgets.Output()
def on_button_click(b):
with out:
clear_output()
data = scrape_weather()
if data is None:
return
csv_filename = save_to_csv(data)
df = pd.DataFrame(data)
display(df)
display(FileLink(csv_filename))
button = widgets.Button(description="Собрать данные о погоде", button_style='success')
button.on_click(on_button_click)
display(button, out)
Этот код создает интерактивный интерфейс в Colab, который, когда его активируют, собирает данные о погоде, отображает их в таблице и предоставляет ссылку для загрузки CSV-файла.
Заключение
В этом руководстве мы продемонстрировали, как объединить веб-скрепинг с интерактивным интерфейсом в Google Colab. Мы создали полный проект, который извлекает данные о погоде в реальном времени, обрабатывает их и отображает результаты в интерактивной таблице.
Если вам нужна помощь в управлении ИИ в бизнесе, свяжитесь с нами по адресу hello@itinai.ru. Подписывайтесь на наш Telegram для получения последних новостей об ИИ.