Страницы: 1
RSS
Вытащить Данные один запросом с Сайта при помощи Power Query
 
Коллеги всем привет.
Подскажите пжл можно ли при помощи Power Query  один запросом выгрузить с сайта(ниже ссылка)данные за последний год ? и можно ли будет добавить первый столбец дату чтобы далее было понятно за какой день статистика  ? ничего секретного там нет, там статистика но минус она предоставляется по дням в ссылке можно это увидеть.

Если кто проделывал такое или может видел/читал скиньте ссылку буду благодарен.


Код
https://www.basketball-reference.com/friv/dailyleaders.fcgi?month=01&day=14&year=2019&type=all#stats::none
 
А вы что сами пробовали, что получилось?
 
За любой день то без проблем я могу подключиться и забрать данные, а мне необходимо сразу за год к примеру вот тут как раз и затык.  
 
Я попробовал сделать так:
https://www.basketball-reference.com/friv/dailyleaders.fcgi?year=2019&type=all
Но не уверен что получилось )

Второй вариант - сгенерируйте таблицу по дням, а затем добавьте в нее 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.
После чего таблица заполнятся датами путем преобразования списка от начальной даты до конечной - преобразование в число и обратно надо так как оператор .. с датами не работает. В процессе преобразования каждый элемент заменяется на список, состоящий из даты и загруженной таблицы за эту дату. То есть тут мы по сути генерируем строки для таблицы.

Для небольшого тестового диапазона.  
Изменено: Alexey_Spb - 17.01.2019 13:47:29
 
Цитата
Alexey_Spb написал:
Но не уверен что получилось )
Я так понял, такая ссылка генерит запрос на статистику по текущей дате. Даже если обратиться к 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

А вот запрос, который генерит диапазон дат и её вызывает:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"ДатаНачало", type date}, {"ДатаКонец", type date}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип", "Дата", each List.Dates( [ДатаНачало], Number.From( [ДатаКонец]-[ДатаНачало] ) + 1, #duration(1, 0, 0, 0) )),
    #"Развернутый элемент Дата" = Table.ExpandListColumn(#"Добавлен пользовательский объект", "Дата"),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Развернутый элемент Дата",{{"Дата", type date}}),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Измененный тип1",{"Дата"}),
    #"Вызвана настраиваемая функция" = Table.AddColumn(#"Другие удаленные столбцы", "fx_122PlayersTable", each fx_122PlayersTable([Дата])),
    #"Развернутый элемент fx_122PlayersTable" = Table.ExpandTableColumn(#"Вызвана настраиваемая функция", "fx_122PlayersTable", {"Rk", "Player", "Tm", "", "Opp", "2", "MP", "FG", "FGA", "FG%", "3P", "3PA", "3P%", "FT", "FTA", "FT%", "ORB", "DRB", "TRB", "AST", "STL", "BLK", "TOV", "PF", "PTS", "GmSc"}, {"Rk", "Player", "Tm", "Столбец1", "Opp", "2", "MP", "FG", "FGA", "FG%", "3P", "3PA", "3P%", "FT", "FTA", "FT%", "ORB", "DRB", "TRB", "AST", "STL", "BLK", "TOV", "PF", "PTS", "GmSc"})
in
    #"Развернутый элемент fx_122PlayersTable"

Оно?
Изменено: PooHkrd - 17.01.2019 13:29:24
Вот горшок пустой, он предмет простой...
 
Спасибо за отклик, правильно ли я понял Логика тогда данного запроса такая же как выгрузка курсу $ к примеру с сайта ЦБ?
 
Цитата
Александр L написал: же как выгрузка курсу $ к примеру с сайта ЦБ
Я не знаю логику выгрузки курса с сайта ЦБ, поэтому ничего не могу сказать.
Но в целом логика - "повторение - мать-учение!"
Изменено: Alexey_Spb - 17.01.2019 13:46:43
 
Александр L, если вы про эту статью Дмитрия (The Prist) Щербакова. То у него примерно та же логика используется в конце статьи, т.е. забор из таблицы в файле параметров, на основании которых будут генериться ссылки, а далее в цикле генерим ссылки и выковыриваем все нужные таблицы с сайта. Только реализовал он это при помощи List.Transform, а не Table.AddColumn. Здесь принципиальной разницы не вижу, работать должно что так, что этак. Организовывать опрос в цикле можно множеством разных способов.
Изменено: PooHkrd - 17.01.2019 13:55:08
Вот горшок пустой, он предмет простой...
 
PooHkrd, нет статьи этой нет, помню года Два назад Максим Зеленский помогал мне настроить выгрузку с сайта ЦБ , файла к сожалению нет на прошлой работе оставил))) Но просто я вспоминал как можно выцепить, и вы показали и я вспомнил когда делал такое)).
Спасибо всем вопрос Закрыт.
 
Коллеги подскажите что делаю не так , ввожу другую ссылку  и данные тупо дублируются.
Так же в  Запросе   (StatDate as date) => идёт другой порядок так же поменял не работает.
Файл весит более 13 мб. попробую сейчас урезать тут вложить.

Код
https://www.hockey-reference.com/friv/dailyleaders.fcgi?year=2019&month=1&day=20
 
Цитата
Александр L написал:
ввожу другую ссылку  и данные тупо дублируются.

Ссылка в таком виде?

year=2019&month=1&day=20

Если да, то вам нужно добавить объявленные имена (год, месяц, день) в ссылку:

month=" & Month & "&day=" & Day & "&year=" & Year  
Изменено: Alexey_Spb - 22.01.2019 12:31:16
 
Да я это поменял конечно сразу.
Вложил файл  
Изменено: Александр L - 22.01.2019 12:41:46 (Вложил Корректный Файл)
 
Вы в коде функции зачем-то переменной 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 января для каждой даты. Уберите эту строку и будет вам все хорошо.
З.Ы. Отлаживание программы - это избавление программы от всякой лажи. ;)
Изменено: PooHkrd - 22.01.2019 14:17:51
Вот горшок пустой, он предмет простой...
 
Странно сейчас буду искать откуда она вообще появилась.
без неё я правильно всё делал?
 
Цитата
Александр L написал:
без неё я правильно всё делал?
Да, проверил, грузится без дублей.
Вот горшок пустой, он предмет простой...
 
Цитата
Александр L написал:
откуда она вообще появилась
наверное, вы из функции делали запрос и(или) наоборот, закомментировав или
Код
(StatDate as date) =>

или
Код
StatDate = #date(2019,01,14),
Страницы: 1
Наверх