Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
PQ. Web-парсинг. POST запросы.
 
Добрый день.

Подскажите, пожалуйста, как получить доступ к данным (услуга, стоимость) на странице ссылка, включая те, что открываются по мере перехода между номерами страниц (от 1 до 235).

Web.BrowserContents -> Html.Table и Text.FromBinary+Web.Contents ничего не видят. Через F12 тоже не вижу ссылок POST-запросов.
PQ. Web-парсинг. POST запросы.
 
Добрый день.

Необходим скрипт PQ для доступа к данным (услуга, стоимость) на странице ссылка, включая те, что открываются по мере перехода между отделениями.

Макрос не подойдет, только PQ.
PQ. Web-парсинг. POST запросы.
 
Добрый день.

Подскажите, пожалуйста, как получить доступ к данным (услуга, стоимость) на странице ссылка, включая те, что открываются по мере перехода между отделениями?

Web.BrowserContents -> Html.Table и Text.FromBinary+Web.Contents ничего не видят. Через F12 тоже не вижу ссылок POST-запросов.
PQ. Web-парсинг. POST запросы.
 
Добрый день.

Необходим скрипт PQ для доступа к данным (услуга, стоимость) на страницах, первая из которых - ссылка, включая скрытые части под кнопками "Развернуть".

Макрос не подойдет, только PQ.
PQ. Отсутствие данных в html-коде
 
Добрый день.

Не могу разобраться, почему
Код
= Table.FromColumns({Lines.FromBinary(Web.Contents("https://helix.ru/catalog/client/vse-analizy"))})
наименования услуг видит, а цены - нет.  Есть ли в PQ способ получить данные по ценам?
PQ. Парсинг данных с сайта
 
Добрый день.

Необходим скрипт PQ для доступа к данным (услуга, стоимость) на странице ссылка, включая скрытую часть, раскрывающуюся по мере скроллинга.

Макрос не подойдет, только PQ.
PQ. Доступ к контенту на web-странице
 
Добрый день.

Подскажите, пожалуйста, как получить доступ к данным (услуга, стоимость) на странице ссылка, включая скрытую часть, раскрывающуюся по мере скроллинга?

Web.BrowserContents -> Html.Table выцепляет только первые 50 позиций, а Text.FromBinary+Web.Contents не видит цен. Через F12 тоже не вижу решений.
PQ. Нерабочие "try... otherwise..."
 
Добрый день.

Подскажите, почему в следующем коде скрипт всё равно возвращает ошибку, а не null?:
Код
let
    s = try Lines.FromBinary(Web.Contents("https://polyclinika.ru/direction2/detskoeotdelenie/")) otherwise null
in
    s
Ничто не работает, после "otherwise", ни текстовое значение, ни дополнительный скрипт вставки пустой таблицы. Будто бы не видит там ошибки.

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

Необходимо изменить следующую функцию так, чтобы, будучи примененной к списку URL она работала:
Код
(Ссылка)=>
let
    Источник = Function.InvokeAfter(() => try Web.BrowserContents (Ссылка, [WaitFor = [Timeout = #duration(0,0,0,10)]]) otherwise "none", #duration(0,0,00,10)),
    #"Извлеченная таблица из HTML" = Html.Table(Источник, {{"Column1", ".small"}, {"Column2", ".small + *"}, {"Column3", ".spoiler-box .currency"}}, [RowSelector=".table__item"])
in
    #"Извлеченная таблица из HTML"

На данный момент возвращает либо ошибку связанную с истечением времени ожидания (хотя Timeout стоит), либо в конечном итоге парсит информацию не со всех ссылок, хотя в предварительном просмотре всё нормально.

Список URL:
Код
let
    Источник = Table.FromColumns({Lines.FromBinary(Web.Contents("https://www.nrmed.ru/services/"))}),
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each Text.Contains([Column1], "f=""/services/") and not Text.Contains([Column1], "popup")),
    #"Извлеченный текст между разделителями" = Table.TransformColumns(#"Строки с примененным фильтром", {{"Column1", each Text.BetweenDelimiters(_, "=""/", """>"), type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Извлеченный текст между разделителями", "Пользовательский", each "https://www.nrmed.ru/" & [Column1]),
    #"Строки с примененным фильтром1" = Table.SelectRows(#"Добавлен пользовательский объект", each not Text.Contains([Пользовательский], "nav-menu")),
    #"Удаленные дубликаты1" = Table.Distinct(#"Строки с примененным фильтром1", {"Пользовательский"}),
    #"URL List" = Table.RemoveColumns(#"Удаленные дубликаты1",{"Column1"})
in
 #"URL List"
PQ. Доступ к контенту страницы на ajax
 
Добрый день.

Существует ли способ получить доступ через PQ к ссылкам на странице?: url

Ни Web.Contents ни Web.BrowserContents их не видит.
PQ. Синтаксис Function.InvokeAfter
 
Добрый день.

Не могу разобраться, почему, но Function.InvokeAfter будучи применена к списку URL не работает в данном коде:
Код
(Ссылка)=>
let
    Источник = Function.InvokeAfter(() => try Web.BrowserContents (Ссылка, [WaitFor = [Timeout = #duration(0,0,0,10)]]) otherwise "none", #duration(0,0,00,10)),
    #"Извлеченная таблица из HTML" = Html.Table(Источник, {{"Column1", ".small"}, {"Column2", ".small + *"}, {"Column3", ".spoiler-box .currency"}}, [RowSelector=".table__item"])
in
    #"Извлеченная таблица из HTML"

Что может быть не так?
PQ. Проблемы с загрузкой информации при защите от DDoS
 
Добрый день.

Столкнулся со следующей проблемой: запрос исправно подгружает данные в предварительный просмотр PQ, однако после нажатия "Закрыть и применить" выдает ошибку: "Не удалось получить содержимое веб-страницы." Иногда ошибка не выскакивает, но я не смог отследить зависимость, с чем это связано. Пересохранение настроек источника данных не влияет на ситуацию.

На сайте стоит защита от DDos-атак, которую я частично решил с помощью Function.InvokeAfter. Также на этапе применения функции к списку URL возникают ошибки на некоторых из них, хотя если отдельно специально применить к ним функцию, проблем никаких.

Вопрос: связанны ли ошибки с защитой DDoS и если да, то почему они не устраняются даже в случае установки интервала? Какие существуют еще способы взаимодействия с такого рода защитой?

Запрос:
Код
let
    SD = Web.BrowserContents("https://www.fdoctor.ru/services/"),
    Пользовательский1 = Html.Table(SD, {{"url", "a[href^=""/""]", each "https://www.fdoctor.ru" & [Attributes][href]}}),
    #"Строки с примененным фильтром" = Table.SelectRows(Пользовательский1, each not Text.Contains([url], "offers") and not Text.Contains([url], "popup")),
    #"Удаленные дубликаты1" = Table.Distinct(#"Строки с примененным фильтром", {"url"}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Удаленные дубликаты1", "Пользовательский", each Text.Length([url])),
    #"Строки с примененным фильтром1" = Table.SelectRows(#"Добавлен пользовательский объект", each [Пользовательский] > 25 and [Пользовательский] < 51),
    #"Строки с примененным фильтром2" = Table.SelectRows(#"Строки с примененным фильтром1", each not Text.Contains([url], "privileges") and not Text.Contains([url], "secure") and not Text.Contains([url], "poliklinika") and not Text.Contains([url], "corporate") and not Text.Contains([url], "doctors") and not Text.Contains([url], "programy") and not Text.Contains([url], "health") and not Text.Contains([url], "covid")),
    #"11" = Table.FirstN(#"Строки с примененным фильтром2",280),
    #"URL list" = Table.SelectRows(#"11", each not Text.Contains([url], "services")),
    #"Added Custom" = Table.AddColumn(#"URL list", "q", (x)=> f_site_fdoctor(x[url])),
    #"Удаленные ошибки1" = Table.RemoveRowsWithErrors(#"Added Custom", {"q"}),
    Custom1 = Table.Combine(#"Удаленные ошибки1"[q]),
    #"Удаленные дубликаты" = Table.Distinct(Custom1, {"Наименование"}),
    #"Строки с примененным фильтром3" = Table.SelectRows(#"Удаленные дубликаты", each not Text.Contains([Наименование], "Наименование")),
    #"Переименованные столбцы" = Table.RenameColumns(#"Строки с примененным фильтром3",{{"Наименование", "Услуга"}, {"Стоимость", "Цена"}}),
    #"Измененный тип" = Table.TransformColumnTypes(#"Переименованные столбцы",{{"Цена", Int64.Type}}),
    #"Удаленные ошибки" = Table.RemoveRowsWithErrors(#"Измененный тип", {"Цена"})
in
    #"Удаленные ошибки"
Применяемая функция:
Код
let
f = (x)=>[    
    a = List.Buffer({Function.InvokeAfter(() =>Web.BrowserContents(x), #duration(0,0,00,6))}){0}?,
    b = Table.Combine(List.Transform({
        Html.Table(a, {{"Column1", "DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
        Html.Table(a, {{"Column1", "DIV[id='item_instrumentalnye-issledovaniya'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_instrumentalnye-issledovaniya'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_instrumentalnye-issledovaniya'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
        Html.Table(a, {{"Column1", "DIV[id='item_manipulyatsii'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_manipulyatsii'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_manipulyatsii'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
        Html.Table(a, {{"Column1", "DIV[id='item_manipulyatsii-i-protsedury'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_manipulyatsii-i-protsedury'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_manipulyatsii-i-protsedury'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
        Html.Table(a, {{"Column1", "DIV[id='item_spravki'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_spravki'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_spravki'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
        Html.Table(a, {{"Column1", "DIV[id='item_analizy'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_analizy'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_analizy'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
        Html.Table(a, {{"Column1", "DIV[id='item_operatsii'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_operatsii'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_operatsii'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
        Html.Table(a, {{"Column1", "TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="TABLE.price-table.js-service-prices > * > TR"])
    }, Table.PromoteHeaders))[[Наименование], [Стоимость]]?][b]
in
    f
PQ парсинг табличных данных и защита от DDOS-атак
 
Добрый день.

Необходимо изменить функцию
Код
(Ссылка)=>
let
    Источник = try Web.BrowserContents(Ссылка) otherwise "none",
    #"Извлеченная таблица из HTML" = Html.Table(Источник, {{"Column1", ".col-num"}, {"Column2", ".col-test-name *"}, {"Column3", ".col-price"}}, [RowSelector=".tests-items LI"]),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Извлеченная таблица из HTML",{"Column1"}),
    #"Замененное значение" = Table.ReplaceValue(#"Удаленные столбцы","Р","",Replacer.ReplaceText,{"Column3"}),
    #"Измененный тип" = Table.TransformColumnTypes(#"Замененное значение",{{"Column3", Int64.Type}})
in
    #"Измененный тип"
так, чтобы она собирала табличные данные со списка URL
Код
let
    Источник = Table.FromColumns({Lines.FromBinary(Web.Contents("https://www.labquest.ru/analizy-i-tseny/"))}),
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each Text.Contains([Column1], "/analizy-i-tseny/")),
    #"Извлеченный текст между разделителями" = Table.TransformColumns(#"Строки с примененным фильтром", {{"Column1", each Text.BetweenDelimiters(_, "href=""", """"), type text}}),
    #"Удаленные дубликаты" = Table.Distinct(#"Извлеченный текст между разделителями"),
    #"Строки с примененным фильтром1" = Table.SelectRows(#"Удаленные дубликаты", each [Column1] <> null and [Column1] <> ""),
    #"Строки с примененным фильтром2" = Table.SelectRows(#"Строки с примененным фильтром1", each not Text.Contains([Column1], "https://www.labquest.ru")),
    #"Строки с примененным фильтром3" = Table.SelectRows(#"Строки с примененным фильтром2", each ([Column1] <> "#")),
    #"Разделить столбец по разделителю" = Table.SplitColumn(#"Строки с примененным фильтром3", "Column1", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7"}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Разделить столбец по разделителю",{"Column1.1", "Column1.6", "Column1.7"}),
    #"Объединенные столбцы1" = Table.CombineColumns(#"Удаленные столбцы",{"Column1.2", "Column1.3", "Column1.4", "Column1.5"},Combiner.CombineTextByDelimiter("/", QuoteStyle.None),"Сведено"),
    #"Замененное значение1" = Table.ReplaceValue(#"Объединенные столбцы1","//","/",Replacer.ReplaceText,{"Сведено"}),
    #"Удаленные верхние строки" = Table.Skip(#"Замененное значение1",1),
    #"Замененное значение2" = Table.ReplaceValue(#"Удаленные верхние строки","analizy-i-tseny","/analizy-i-tseny",Replacer.ReplaceText,{"Сведено"}),
    #"Удаленные дубликаты2" = Table.Distinct(#"Замененное значение2"),
    #"Переименованные столбцы1" = Table.RenameColumns(#"Удаленные дубликаты2",{{"Сведено", "Column1"}}),
    #"Добавлен пользовательский объект3" = Table.AddColumn(#"Переименованные столбцы1", "Пользовательский", each "www.labquest.ru"),
    #"Объединенные столбцы3" = Table.CombineColumns(#"Добавлен пользовательский объект3",{"Пользовательский", "Column1"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Сведено"),
    #"Добавлен пользовательский объект4" = Table.AddColumn(#"Объединенные столбцы3", "Пользовательский", each #"f_labquest_url_extract (2)"([Сведено])),
    #"Развернутый элемент Пользовательский1" = Table.ExpandTableColumn(#"Добавлен пользовательский объект4", "Пользовательский", {"Column1"}, {"Пользовательский.Column1"}),
    #"Добавлен пользовательский объект5" = Table.AddColumn(#"Развернутый элемент Пользовательский1", "Пользовательский", each if [Пользовательский.Column1]=null then [Сведено] else "www.labquest.ru"&[Пользовательский.Column1]),
    #"Удаленные столбцы2" = Table.RemoveColumns(#"Добавлен пользовательский объект5",{"Сведено", "Пользовательский.Column1"}),
    #"Добавлен пользовательский объект6" = Table.AddColumn(#"Удаленные столбцы2", "Пользовательский.1", each #"f_labquest_url_extract (2)"([Пользовательский])),
    #"Развернутый элемент Пользовательский.1" = Table.ExpandTableColumn(#"Добавлен пользовательский объект6", "Пользовательский.1", {"Column1"}, {"Пользовательский.1.Column1"}),
    #"Добавлен пользовательский объект7" = Table.AddColumn(#"Развернутый элемент Пользовательский.1", "Пользовательский.1", each if [Пользовательский.1.Column1]=null then [Пользовательский] else "www.labquest.ru"&[Пользовательский.1.Column1]),
    #"---" = Table.RemoveColumns(#"Добавлен пользовательский объект7",{"Пользовательский", "Пользовательский.1.Column1"}),
    #"Добавлен пользовательский объект1" = Table.AddColumn(#"---", "Пользовательский", each "/"),
    #"Объединенные столбцы" = Table.CombineColumns(#"Добавлен пользовательский объект1",{"Пользовательский.1", "Пользовательский"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Сведено"),
    #"Список URL" = Table.ReplaceValue(#"Объединенные столбцы","//","/",Replacer.ReplaceText,{"Сведено"})
in
    #"Список URL"

Функция сбора списка URL:
Код
(Ссылка)=>
let
    Источник = try Table.FromColumns({Lines.FromBinary(Web.Contents(Ссылка))})otherwise "none",
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each Text.Contains([Column1], "tests-item-top")),
    #"Извлеченный текст между разделителями" = Table.TransformColumns(#"Строки с примененным фильтром", {{"Column1", each Text.BetweenDelimiters(_, "href=""", """ role")}})
in
    #"Извлеченный текст между разделителями"

Проблема в том, что на сервере стоит защита от DDOS-аттак и, как я понял, она меня банит. Я не совсем понимаю механизм её работы и не знаю, как разбаниться, чтобы пробовать тестировать разные функции в попытках обхода защиты.

Мне интересны любые варианты решения данной задачи (разбитие запроса на несколько, введение задержки выполнения функции, макросы и тд.)
PQ. Парсинг табличных данных с сайта
 
Добрый день.

Следующая функция, будучи применена к списку URL, парсит лишь те данные, что размещены на странице до кнопки "Далее":
Код
(Ссылка)=>
let
    //Источник = Web.BrowserContents("https://kdl.ru/analizy-i-tseny/allergeni-immunocap"),
    Источник = try Web.BrowserContents(Ссылка)otherwise null,
    #"Извлеченная таблица из HTML" = Html.Table(Источник, {{"Column1", ".h-card__code"}, {"Column2", "H3"}, {"Column3", ".h-card__category"}, {"Column4", "._duration .h-card__title"}, {"Column5", "._duration .h-card__content"}, {"Column6", "._price .h-card__title"}, {"Column7", ".nowrap"}}, [RowSelector=".h-card"]),
    #"Измененный тип" = Table.TransformColumnTypes(#"Извлеченная таблица из HTML",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", Currency.Type}}),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Измененный тип",{"Column2", "Column7"}),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Другие удаленные столбцы",{{"Column7", Int64.Type}})
in
    #"Измененный тип1"
Необходимо изменить её так, чтоб парсились и те данные, что расположены после кнопки.

Список URL:
Код
let
    Источник = Table.FromColumns({Lines.FromBinary(Web.Contents("https://kdl.ru/analizy-i-tseny/msk"))}),
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each Text.Contains([Column1], "href=""analizy-i-tseny/")),
    #"Извлеченный текст между разделителями" = Table.TransformColumns(#"Строки с примененным фильтром", {{"Column1", each Text.BetweenDelimiters(_, "#(tab)#(tab)#(tab)<a href=""", """"), type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Извлеченный текст между разделителями", "Пользовательский", each "https://kdl.ru/"),
    #"Объединенные столбцы" = Table.CombineColumns(#"Добавлен пользовательский объект",{"Пользовательский", "Column1"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Сведено")
in
    #"Объединенные столбцы"
Приведение к единому формату текстовых значений содержащих буквы разных алфавитов
 
Добрый день.

Существует ли в Power Query инструмент или способ, позволяющий нивелировать разночтения, в случае использования в текстовых значениях одинаково выглядящих букв разных алфавитов?

Например, если в слове "Anti" по небрежности оператора используется кириллическая "А", в слове "сера" латинская "c" и тд.
PQ: Ошибка SSL/TLS
 
Добрый день.

Существует ли способ решения данной проблемы при подключении к сайту:

DataSource.Error: Базовое соединение закрыто: Не удалось установить доверительные отношения для защищенного канала SSL/TLS.

ссылка
PQ, парсинг табличных данных
 
Добрый день.

Необходимо модифицировать указанную ниже функцию так, чтобы она, будучи применена к списку URL, парсила не только первую таблицу ("Прием врача"), но и все остальные, что там будут и складывала бы их в одну. Таблицы на всех страницах единообразны. Пример URL:

Код
(Ссылка)=>
let
    //Источник = Web.BrowserContents("https://www.fdoctor.ru/hirurg/", [WaitFor = [Selector = "#doctors-services", Timeout = #duration(0,0,00,01)]]),
    Источник = try Web.BrowserContents(Ссылка) otherwise null,
    #"Извлеченная таблица из HTML" = Html.Table(Источник, {{"Column1", "DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Извлеченная таблица из HTML", [PromoteAllScalars=true])
in
    #"Повышенные заголовки"

Список URL:
Код
let
    Семейная = Web.BrowserContents("https://www.fdoctor.ru/services/"),
    Пользовательский1 = Html.Table(Семейная, {{"url", "a[href^=""/""]", each "https://www.fdoctor.ru" & [Attributes][href]}}),
    #"Строки с примененным фильтром" = Table.SelectRows(Пользовательский1, each not Text.Contains([url], "offers")),
    #"Измененный тип" = Table.TransformColumnTypes(#"Строки с примененным фильтром",{{"url", type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип", "Пользовательский", each Text.Length([url])),
    #"Строки с примененным фильтром1" = Table.SelectRows(#"Добавлен пользовательский объект", each [Пользовательский] > 25 and [Пользовательский] < 51),
    #"Строки с примененным фильтром2" = Table.SelectRows(#"Строки с примененным фильтром1", each not Text.Contains([url], "privileges") and not Text.Contains([url], "secure") and not Text.Contains([url], "poliklinika") and not Text.Contains([url], "corporate") and not Text.Contains([url], "doctors") and not Text.Contains([url], "programy") and not Text.Contains([url], "health") and not Text.Contains([url], "covid")),
    #"Удаленные дубликаты1" = Table.Distinct(#"Строки с примененным фильтром2", {"url"}),
    #"Сохраненные первые строки" = Table.FirstN(#"Удаленные дубликаты1",250),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Сохраненные первые строки",{"Пользовательский"})
in
    #"Удаленные столбцы"
PQ функция парсинга всех возможных табличных данных
 
Добрый день.

Подскажите, существует ли способ модифицировать указанную ниже функцию так, чтобы она, будучи применена к списку URL, парсила не только первую таблицу ("Прием врача"), но и все остальные, что там будут и складывала бы их в одну. Таблицы на всех страницах единообразны.

Код
(Ссылка)=>
let
    //Источник = Web.BrowserContents("https://www.fdoctor.ru/hirurg/", [WaitFor = [Selector = "#doctors-services", Timeout = #duration(0,0,00,01)]]),
    Источник = try Web.BrowserContents(Ссылка) otherwise null,
    #"Извлеченная таблица из HTML" = Html.Table(Источник, {{"Column1", "DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(1)"}, {"Column2", "DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR > :nth-child(2)"}}, [RowSelector="DIV[id='item_priem-vracha'] > DIV.price-table-cnt.js-collapsible-inner > TABLE.price-table.js-service-prices > * > TR"]),
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Извлеченная таблица из HTML", [PromoteAllScalars=true])
in
    #"Повышенные заголовки"
DAX. Ищу функцию присвоения категории значению в зависимости от его величины
 
Добрый день, помогите, пожалуйста, найти функцию DAX, если таковая существует.

Есть таблица с двумя столбцами (товар и стоимость) и необходимо каждому товару присвоить категорию, например, от 1 до 10, в соответствии со стоимостью, где первая категория - это товары с диапазоном стоимостей наименьшего порядка, вторая - диапазон стоимостей повыше и т.д. Величина диапазона 1 категории в таком случае - максимальная стоимость в столбце делённая на 10.

Я примерно представляю, как это сделать длинным путём, используя ряд разнообразных функций, однако, изучая справочник DAX, можно предположить, что там наверняка имеется одна-две идеально подходящих, о которых я еще не знаю.  
DAX. Подсчет уникальных значений внутри каждой категории
 
Добрый день.

В DAX пока новичок, поэтому не знаю, с какой стороны подступиться к этой на первый взгляд простой проблеме. Необходимо создать столбец, в котором было бы отображено количество уникальных значений значений столбца "Название БЦ" внутри категории "Район":
 
PQ. Прасинг информации со скрытых элементов страницы
 
Добрый день.

Возможен ли доступ к списку URL, который появляется после нажатия кнопки "ПОКАЗАТЬ ЕЩЕ" на сайте https://www.onclinic.ru/services/ с помощью функций Lines.FromBinary и Web.Contents? либо с помощью каких-то других функций?
PQ. Создание функции. Применение скрипта к списку URL
 
Добрый день.

Наивно полагал, что данный скрипт, завернутый в функцию:
Код
(Ссылка)=>
let
    //Источник = Table.FromColumns({Lines.FromBinary(Web.Contents("https://mrt24.ru/services/mrt/mrt-golovy/mrt-golovnogo-mozga/"))})
    Источник = try (Ссылка) otherwise null,
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each Text.Contains([Column1], "руб.") and Text.Contains([Column1], "МРТ")),
    #"Строки с примененным фильтром1" = Table.SelectRows(#"Строки с примененным фильтром", each not Text.Contains([Column1], "@")),
    #"Разделить столбец по разделителю" = Table.SplitColumn(#"Строки с примененным фильтром1", "Column1", Splitter.SplitTextByDelimiter("class="""">", QuoteStyle.None), {"Column1.1", "Column1.2"})
    
in
    #"Разделить столбец по разделителю"
можно применить к списку URL, полученному таким образом:
Код
let
    Источник = Table.FromColumns({Lines.FromBinary(Web.Contents("https://mrt24.ru/services/mrt/"))}),
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each Text.Contains([Column1], "mrt-") and Text.Contains([Column1], "></li>") and not Text.Contains([Column1], "our-centers")),
    #"Извлеченный текст между разделителями" = Table.TransformColumns(#"Строки с примененным фильтром", {{"Column1", each Text.BetweenDelimiters(_, "https://", "/"">"), type text}}),
    #"Удаленные дубликаты" = Table.Distinct(#"Извлеченный текст между разделителями")
in
    #"Удаленные дубликаты"
однако выдает:

В запросе "" произошла ошибка. Expression.Error: Не удается преобразовать значение "mrt24.ru/services/mr..." в тип Table.
Сведения:
   Value=mrt24.ru/services/mrt/mrt-golovy
   Type=[Type]

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

Помогите, пожалуйста, решить проблему. В при импорте файла Exсel (во вложении) Power Query не видит первый столбец.

Ссылка на файл: https://www.k31.ru/price/?alias=full
PQ. Web.Contents отображает не весь код страницы
 
Добрый день, господа.

Web-коннектор не отображает весь код страницы:
Код
Table.FromColumns({Lines.FromBinary(Web.Contents("https://doct.ru/price/"))})

В частности он не видит строк, содержащих в себе "class="services-price-list__name"", хотя, если нажать F12, строки видны.
PQ. Сопоставление таблиц с разными значениями для одних и тех же измерений
 
Добрый день, уважаемые.

Возникла задача сравнения ряда прайсов. Вопрос, как соотнести услуги разных компаний, если их формулировка отличается от прайса к прайсу. Есть догадка, что можно выделить ключевые слова, которые неизменно присутствуют в написании позиций независимо от прайса, но как это сделать, взять в толк не могу. Неужели, составление таблицы соответствий вручную - единственное решение?  
PQ. Запрос конкретных столбцов таблицы.
 
Добрый день.

Столкнулся с такой задачей: в списке URL, к которым применяется завернутый в функцию запрос присутствуют таблицы с разным количеством столбцов, что приводит к ошибке на тех страницах, где таблица отличается от той, что взята за основу в функции. Однако в каждой таблице присутствуют два нужных мне столбца. Вопрос: можно ли в запросе обратиться не ко всей таблице, а лишь к двум конкретным столбцам?
Код
(Ссылка)=>
let
    //Источник = Web.BrowserContents("https://semeynaya.ru/tseny/page/103-lechenie/9316-psikhiatriya"),
    Источник = Web.BrowserContents(Ссылка),
    #"Извлеченная таблица из HTML" = Html.Table(Источник, {{"Column1", "TABLE.table.table-striped > * > TR > :nth-child(1)"}, {"Column2", "TABLE.table.table-striped > * > TR > :nth-child(2)"}, {"Column3", "TABLE.table.table-striped > * > TR > :nth-child(3)"}, {"Column4", "TABLE.table.table-striped > * > TR > :nth-child(4)"}}, [RowSelector="TABLE.table.table-striped > * > TR"]),
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Извлеченная таблица из HTML", [PromoteAllScalars=true]),
    #"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Код услуги", type text}, {"Внутренний код", type text}, {"Наименование", type text}, {"Цена, руб", Int64.Type}})
in
    #"Измененный тип"
PQ, долгая загрузка Web.BrowserContents
 
Добрый день, господа.

Подскажите, по какой причине PQ может грузить содержание страницы вечность (в итоге не загрузив даже при [WaitFor = [Timeout = #duration(0,0,50,00)] ), в то время, как PBI Desktop и браузеры грузят её на раз? Как можно это исправить?

Страница: https://www.fdoctor.ru/hirurg/
PQ, Ошибка при сериализации или десериализации с помощью JSON JavaScriptSerializer.
 
Добрый день, господа.

При попытке парсинга веб-страницы вылетает следующая ошибка:

DataSource.Error: Не удалось получить содержимое веб-страницы.
Сведения:
   Url=https://alfazdrav.ru/services/price/
   ErrorMessage=Ошибка при сериализации или десериализации с помощью JSON JavaScriptSerializer. Длина строки превышает значение, заданное для свойства maxJsonLength.
Имя параметра: input


Подозреваю, есть вероятность, что готового решения придется ждать долго, но может пока подскажете, в каком хоть направлении копать. Благодарю.
Страницы: 1
Наверх