Коллеги всем привет. Подскажите пжл можно ли при помощи Power Query один запросом выгрузить с сайта(ниже ссылка)данные за последний год ? и можно ли будет добавить первый столбец дату чтобы далее было понятно за какой день статистика ? ничего секретного там нет, там статистика но минус она предоставляется по дням в ссылке можно это увидеть.
Если кто проделывал такое или может видел/читал скиньте ссылку буду благодарен.
Второй вариант - сгенерируйте таблицу по дням, а затем добавьте в нее Custom столбец, который будет по ссылке с параметрами (год, месяц, день) загружать с сайта данные. После развертки у вас будет статистика за нужный вам период.
Вот основной рабочий код, что-то типа этого.. Вам останется развернуть и слить результат.
Код
let
Data =
#table
(
{"Date", "Data"},
List.Transform
(
{Number.From(#date(2018,1,1))..Number.From(#date(2018,12,31))},
each
let Dt = Date.From(_)
in
{
Dt,
Web.Page(Web.Contents("https://www.basketball-reference.com/friv/dailyleaders.fcgi?month=" & Text.From(Date.Month(Dt)) & "&day=" & Text.From(Date.Day(Dt)) & "&year=" & Text.From(Date.Year(Dt)) & "&type=all#stats::none")){1}[Data]
}
)
)
in
Data
Код создает таблицу с двумя колонками Date - дата и Data - таблица с данными игроков за Date. После чего таблица заполнятся датами путем преобразования списка от начальной даты до конечной - преобразование в число и обратно надо так как оператор .. с датами не работает. В процессе преобразования каждый элемент заменяется на список, состоящий из даты и загруженной таблицы за эту дату. То есть тут мы по сути генерируем строки для таблицы.
Я так понял, такая ссылка генерит запрос на статистику по текущей дате. Даже если обратиться к 2018 году, все равно выходит текущая дата прошлого года.
Вот функция которая генерит ссылку исходя из нужной даты.
Код
(StatDate as date) =>
let
Year = Date.ToText( StatDate, "yyyy" ),
Month = Date.ToText( StatDate, "MM" ),
Day = Date.ToText( StatDate, "dd" ),
Source = Web.Page(Web.Contents("https://www.basketball-reference.com/friv/dailyleaders.fcgi?month=" & Month & "&day=" & Day & "&year=" & Year & "&type=all")),
GetTable = Source{1}[Data],
ChangedType = Table.TransformColumnTypes(GetTable,{{"Rk", Int64.Type}, {"Player", type text}, {"Tm", type text}, {"", type text}, {"Opp", type text}, {"2", type text}, {"MP", type text}, {"FG", Int64.Type}, {"FGA", Int64.Type}, {"FG%", type text}, {"3P", Int64.Type}, {"3PA", Int64.Type}, {"3P%", type text}, {"FT", Int64.Type}, {"FTA", Int64.Type}, {"FT%", type text}, {"ORB", Int64.Type}, {"DRB", Int64.Type}, {"TRB", Int64.Type}, {"AST", Int64.Type}, {"STL", Int64.Type}, {"BLK", Int64.Type}, {"TOV", Int64.Type}, {"PF", Int64.Type}, {"PTS", Int64.Type}, {"GmSc", type text}})
in
ChangedType
А вот запрос, который генерит диапазон дат и её вызывает:
Александр L, если вы про эту статью Дмитрия (The Prist) Щербакова. То у него примерно та же логика используется в конце статьи, т.е. забор из таблицы в файле параметров, на основании которых будут генериться ссылки, а далее в цикле генерим ссылки и выковыриваем все нужные таблицы с сайта. Только реализовал он это при помощи List.Transform, а не Table.AddColumn. Здесь принципиальной разницы не вижу, работать должно что так, что этак. Организовывать опрос в цикле можно множеством разных способов.
PooHkrd, нет статьи этой нет, помню года Два назад Максим Зеленский помогал мне настроить выгрузку с сайта ЦБ , файла к сожалению нет на прошлой работе оставил))) Но просто я вспоминал как можно выцепить, и вы показали и я вспомнил когда делал такое)). Спасибо всем вопрос Закрыт.
Коллеги подскажите что делаю не так , ввожу другую ссылку и данные тупо дублируются. Так же в Запросе (StatDate as date) => идёт другой порядок так же поменял не работает. Файл весит более 13 мб. попробую сейчас урезать тут вложить.
Вы в коде функции зачем-то переменной StatDate присваиваете значение #date(2019,01,14)
Код
(StatDate as date) =>
let
StatDate = #date(2019,01,14),
Year = Date.ToText( StatDate, "yyyy" ),
Month = Date.ToText( StatDate, "MM" ),
Day = Date.ToText( StatDate, "dd" ),
Source = Web.Page(Web.Contents("https://www.hockey-reference.com/friv/dailyleaders.fcgi?month=" & Month & "&day=" & Day & "&year=" & Year)),
GetTable = Source{1}[Data],
#"Измененный тип" = Table.TransformColumnTypes(GetTable,{{"S", type number}, {"HIT", type number}, {"BLK", type number}, {"FOW", type number}, {"FOL", type number}, {"Assists SH", type number}, {"Assists PP", type number}, {"Assists EV", type number}, {"Goals GW", type number}, {"Goals SH", type number}, {"Goals PP", type number}, {"Goals EV", type number}, {"PIM", type number}, {"+/-", type number}, {"Scoring PTS", type number}, {"Scoring A", type number}, {"Scoring G", type number}})
in
#"Измененный тип"
Ясен пень она вам собирает данные за 14 января для каждой даты. Уберите эту строку и будет вам все хорошо. З.Ы. Отлаживание программы - это избавление программы от всякой лажи.