Если вы работаете специалистом по анализу данных, где вам нужно построить несколько моделей для получения прогноза продаж, тогда данные Погода становятся очень важным компонентом для получения переменных погоды, которые играют роль корневых переменных для вашей модели данных в ваши алгоритмы машинного обучения. Теперь вы должны хорошо понимать, как очищать веб-страницы и извлекать данные.

Использование данных о погоде. Подумайте о компании, которая хочет учитывать данные о погоде, чтобы повысить точность прогнозов продаж. Это может начаться с специалиста по данным в лаборатории данных. Специалист по данным может предоставить данные о погоде в лаборатории для уточнения модели прогнозирования. Как только он подтвердит, что данные о погоде повлияют на его модель, этот новый набор данных может быть проверен на предмет качества, соответствия и авторских прав ответственным за данные, а затем, наконец, ИТ-специалист автоматизирует интеграцию данных, так что данные о погоде будут передаваться в реальном времени в корпоративное озеро данных и задокументировано в каталог данных, чтобы его могли использовать бизнес-аналитики и бизнес-пользователи.

У вас может быть более разрозненный подход, учитывая, что ИТ-специалисты должны передавать данные с помощью инструментов интеграции данных. Затем специалисты по данным в своей лаборатории данных будут использовать платформу для анализа данных, а офис директора по данным будет использовать структуру управления данными. Но как они могли работать в команде с разрозненным подходом? И кто мог контролировать этот разрозненный набор практик, инструментов и наборов данных?

В этом и заключается суть совместного управления данными - позволяя людям работать в команде, чтобы воспользоваться всеми преимуществами ваших данных.

Существует множество платных API, которые предоставляют вам эти конкретные данные, и они будут взимать плату за каждое местоположение. Если у вас нет достаточного бюджета проекта, вы можете написать свой собственный код (код удаления веб-страниц) на Python, чтобы получать данные о погоде на уровне дня для любого конкретного места.

Как работает веб-парсинг? - Когда мы очищаем Интернет, мы пишем код, который отправляет запрос на сервер, на котором размещена указанная нами страница. Как правило, наш код загружает исходный код этой страницы, как и браузер. Но вместо того, чтобы отображать страницу визуально, он фильтрует страницу, выискивая указанные нами HTML-элементы, и извлекает то содержание, которое мы ему поручили извлечь.

Загрузка данных о погоде. Теперь мы знаем достаточно, чтобы приступить к извлечению информации о местной погоде с веб-сайта Национальной метеорологической службы. Первый шаг - найти страницу, которую мы хотим очистить.

Здесь мы собираемся использовать MeteoGuru.uk для получения данных о погоде на уровне дня. Мы будем использовать некоторые наиболее распространенные библиотеки Python для написания нашего кода и постараемся писать очень упрощенно, чтобы вы могли легко понять каждую строку кода.

Ниже представлен интерфейс для Лондона от MeteoGuru.uk

Использование селекторов CSS для получения информации о погоде. Мы также можем искать элементы с помощью селекторов CSS. С помощью этих селекторов язык CSS позволяет разработчикам определять стили HTML-тегов. Вот некоторые примеры:

  • body p a - находит все теги a внутри тега p внутри тега body.
  • html body - находит все теги body внутри тега html.
  • p.outer-text - находит все p теги с классом outer-text.
  • p#first - находит все p теги с идентификатором first.
  • body p.outer-text - находит любые p теги с классом outer-text внутри тега body.
  • Загрузите веб-страницу с прогнозом.

Теперь мы знаем достаточно, чтобы загрузить страницу и начать ее анализ. В приведенном ниже коде мы:

  • Создайте класс BeautifulSoup для анализа страницы.
  • «Запросы» - эта критически важная библиотека необходима для фактического переноса данных с веб-сервера на ваш компьютер, и она также содержит некоторые дополнительные интересные функции, такие как кеширование.

Импорт библиотек Python - нам нужны библиотеки Python, которые помогут нам в веб-скраппинге. Библиотеки Python для парсинга веб-страниц

  • Beautiful Soup 4 - это библиотека, которую мы здесь использовали, и она предназначена для упрощения фильтрации данных на основе тегов HTML.
  • Одновременный поиск всех экземпляров тега для начала рабочих дней

#Python программа для очистки веб-сайта
import bs4, re
from bs4 import BeautifulSoup

# Библиотека запросов
импорт запросов

# Pandas - это библиотека Python с открытым исходным кодом под лицензией BSD, обеспечивающая высокопроизводительные,
# простые в использовании структуры данных и инструменты анализа данных для языка программирования Python.
импортировать pandas как pd

#import datatime library
from datetime import datetime

Общедоступные переменные - это переменные, которые будут использоваться во всем коде Python, как показано ниже -

# определить базовый URL
base_url = «https: //%s.meteoguru.uk/

# определить список месяцев для архивных данных о погоде
lst = [«май-2019», «июнь-2019», «июль-2019», «август-2019», «сентябрь-2019», «октябрь-2019», ноябрь-2019, «декабрь-2019», «январь-2020», «февраль-2020», «март-2020», «апрель-2020», «май-2020», «июнь-2020», «июль-2019»,
«август. -2020 ”]

Функция Python для удаления веб-страниц. В этой функции мы передаем URL-адрес для загрузки / удаления всей веб-страницы. На этом веб-сайте погоды есть четыре блока, в которых хранятся данные о погоде, такие как:

  1. Одновременный поиск всех экземпляров тега для окончания рабочих дней
  2. Одновременный поиск всех экземпляров тега для начала выходных
  3. Одновременный поиск всех экземпляров тега для окончания выходных
  4. # Одновременный поиск всех экземпляров тега для начала рабочих дней
    для дня в днях.findAll («div», attrs = {«class»: «pl-0 pr-0 grid- box mb-1 с округлением с-границей width1_7 начало рабочих дней следующий месяц »}):
    #print (day)
    date_name = day.find (« div », attrs = {« class »:« pl-1 pr-1 с закругленными углами background-gray-1 width100 ”}). text.replace ('\ t', ''). replace ('\ n', ''). split (',')
    date = date_name [0]
    dayn = date_name [1]
    max_temp = day.find («p», attrs = {«class»: «pt-2 mb-1 center-text big-text-1 text-center ”}). text.replace ('\ xa0', ''). replace ('\ t', ''). replace ('\ n', ''). replace ('+', ''). ) .replace ('° C', '')

    min_temp = day.find («p», attrs = {«class»: «pt-1 mb-0 pb-0 center-text ”}). Text.replace ('\ xa0', ''). Replace ('\ t', ''). Replace ('\ n', ''). Replace ('+', ''). Replace ('+', ''). Заменить ('° C', '')
    temp = day.find («span», attrs = {«class»: «mb-2 pt-0 mt-0 text-center width100 fz-08»}) .text.replace ('\ xa0', ''). split (':')
    weather = temp [0]

    wind = temp [1] .split (',' ) [0] .re place ('mph', '')
    влажность = temp [3] .replace ('%', '')
    #append dataframe
    ndf = ndf.append ({«регион» : region, «date»: date, «day»: dayn, «weather»: weather, «max_temp»: max_temp, «min_temp»: min_temp, «wind»: ветер, «влажность»: влажность}, ignore_index = True)


    # Одновременное обнаружение всех экземпляров тега для окончания выходных
    для дня в днях.findAll («div», attrs = {« class »:« pl-0 pr-0 grid-box mb-1 закруглено с границей width1_7, завершение выходных в следующем месяце »}):
    #print (day)
    date_name = day.find (« div » , attrs = {«класс»: «pl-1 pr-1 закругленный фон-серый-1 ширина100»}). text.replace ('\ t', ''). replace ('\ n', ''). split (',')
    date = date_name [0]
    dayn = date_name [1]
    max_temp = day.find («p», attrs = {«class»: «pt- 2 mb-1 center-text big-text-1 text-center ”}). Text.replace ('\ xa0', ''). Replace ('\ t', ''). Replace ('\ n', '') .replace ('+', ''). replace ('° C', '')
    #max_temp = day.find («p», {«class»: «pt-2 mb- 1 center-text big-text-1 text-center ”}). Текст .replace ('\ xa0', ''). replace ('\ t', ''). replace ('\ n', '')
    min_temp = day.find («p», attrs = { «Класс»: «pt-1 mb-0 pb-0 center-text»}). Text.replace ('\ xa0', ''). Replace ('\ t', ''). Replace ('\ n ',' '). replace (' + ',' '). replace (' ° C ',' ')
    temp = day.find («span», attrs = {«class»: «mb- 2 pt-0 mt-0 text-center width100 fz-08 ”}). Text.replace ('\ xa0', ''). Split (':')
    weather = temp [0]
    #print (temp)
    wind = temp [1] .split (',') [0] .replace ('mph', '')
    влажность = temp [3] .replace (' % ',' ')
    #append dataframe
    ndf = ndf.append ({«регион»: регион, «дата»: дата, «день»: день, «погода»: погода, «max_temp »: Max_temp,« min_temp »: min_temp,« wind »: wind,« влажность »: влажность}, ignore_index = True)

    # Одновременный поиск всех экземпляров тега для начала выходных
    для дня в днях. :
    #print (день)
    date_name = day.find («div», attrs = {«class»: «pl- 1 пр-1 округленный фон-серый-1 ширина100 ”}). Text.replace ('\ t', ''). Replace ('\ n', ''). Split (',')
    дата = date_name [0]
    dayn = date_name [1]
    max_temp = day.find («p», attrs = {«class»: «pt-2 mb-1 center-text big-text- 1 text-center ”}). Text.replace ('\ xa0', ''). Replace ('\ t', ''). Replace ('\ n', ''). Replace ('+', ' ') .replace (' ° C ',' ')
    #max_temp = day.find («p», {«class»: «pt-2 mb-1 center-text big-text-1 text- center ”}). text.replace ('\ xa0', ''). replace ('\ t', ''). replace ('\ n', '')
    min_temp = day.find (« p », attrs = {« class »:« pt-1 mb-0 pb-0 center-text »}). text.replace ('\ xa0', ''). replace ('\ t', '') .replace ('\ n', ''). replace ('+', ''). replace ('° C', '')
    temp = day.find ("span", attrs = {" class »:« mb-2 pt-0 mt-0 text-center width100 fz-08 »}). text.replace ('\ xa0', ''). split (':')
    weather = temp [0]
    #print (temp)
    wind = temp [1] .split (',') [0] .replace ('mph', '')
    влажность = temp [ 3] .replace ('%', '')
    #append dataframe
    ndf = ndf.append ({«регион»: регион, «дата»: дата, «день»: dayn, «weather»: погода, «max_temp»: max_temp, «min_temp»: min_temp, «wind»: ветер, «влажность»: влажность}, ignore_index = True)

    #Finding все экземпляры тега одновременно для окончания будних дней
    для дня в днях.findAll («div», attrs = {«class»: «pl-0 pr-0 grid-box mb-1 Round with-border width1_7 завершение будних дней в следующем месяце »}):

    date_name = day.find (« div », attrs = {« class »:« pl-1 pr-1 закругленный фон-серый-1 width100 ”}). Text.replace ('\ t', ''). Replace ('\ n', ''). Split (',')
    date = date_name [0]
    dayn = date_name [1]
    max_temp = day.find («p», attrs = {«class»: «pt-2 mb-1 center-text big-text-1 text-center»}). text.replace ('\ xa0', ''). replace ('\ t', ''). replace ('\ n', ''). replace ('+', ''). replace ('° C', ' ')
    #max_temp = day.find («p», {«class»: «pt-2 mb-1 center-text big-text-1 text-center»}). text.replace (' \ xa0 ',' '). replace (' \ t ',' '). replace (' \ n ',' ')
    min_temp = day.find («p», attrs = {«class»: « pt-1 mb-0 pb-0 center-text ”}). tex

В этой функции мы используем синтаксический анализатор html для веб-синтаксического анализа и определения фрейма данных для данных, как показано ниже -

# функция получения данных о погоде по входному параметру url
def get_weather_data (url):
# url = 'https://june-2020.meteoguru.uk/'
page = requests .get (url)

# Разбор страницы с помощью BeautifulSoup
soup = BeautifulSoup (page.content, 'html.parser')

# извлечение региона
region = soup.find (h2, attrs = {class: mb-0}). text.replace ('Погода для', ''). replace (', Архив', '')

# получить фрейм данных о погоде на следующие несколько дней
ndf = pd.DataFrame (columns = ["region", "date" , День, погода, max_temp, min_temp, wind, влажность])

# Используйте метод find, который вернет один объект BeautifulSoup
days = soup.find (div, attrs = {class: grid-wraper clearfix width100}). find (div, attrs = {class: row})

Извлечение всей информации со страницы. Теперь, когда мы знаем, как извлекать каждый отдельный фрагмент информации, мы можем объединить наши знания с селекторами CSS и составлением списков, чтобы извлечь все сразу с веб-страницы, и мы необходимо сгенерировать веб-адрес для вызова этого метода, как указано ниже -

if __name__ == «__main__»:

#define dataframe columns with headers
df = pd.DataFrame (columns = [«region», «date», «day», «weather») , «Max_temp», «min_temp», «wind», «влажность»])

# новый список для тестирования
lst = [«май-2019»]

# цикл for, если у вас несколько месяцев
для ymon в lst:
print (ymon)
url = base_url% (ymon)
print (url)
# получить данные
df = df.append (get_weather_data (url), ignore_index = True)
print (df.head ())

После запуска кода мы получаем следующую информацию -

май-2019
«https://may-2019.meteoguru.uk/»

Функция вызова для нескольких местоположений - если вы хотите запустить один и тот же код для нескольких местоположений, вам необходимо создать новый список, содержащий эти местоположения, как указано ниже:

# списки местоположений с погодой
loc = [«England», «Wales», «london»]
# базовый URL для нескольких местоположений
burl = 'https: //%s.meteoguru.uk /% s / '

Теперь вы можете видеть, что мы изменили базовый URL-адрес, который также имеет два параметра: первый% s используется для месяца погоды, а второй% s используется для местоположения.

# списки местоположений с погодой
loc = [«England», «Wales», «london»]
# базовый URL для нескольких местоположений
burl = 'https: //%s.meteoguru.uk /% s / '
# цикл for для местоположения
for l в loc:
# цикл для нескольких месяцев
для ymon в lst:
#pass parameters в базовом URL
url = burl% (ymon, l)
# print url
print (url)
#append dataframe
df = df.append (get_weather_data (url), ignore_index = True)
# сохранить фрейм данных в csv
df.to_csv («weather_Uk.csv», index = False)

«Https://may-2019.meteoguru.uk/England/»
«https://may-2019.meteoguru.uk/Wales/»
«https: //may-2019.meteoguru .uk / london / »

Объединение наших данных в фрейм данных Pandas - теперь мы можем объединить данные в фрейм данных Pandas и проанализировать их. DataFrame - это объект, который может хранить табличные данные, что упрощает анализ данных.

Python - извлечение данных о погоде на дневном уровне