Страницы: 1
RSS
PQ. Прасинг информации со скрытых элементов страницы
 
Добрый день.

Возможен ли доступ к списку URL, который появляется после нажатия кнопки "ПОКАЗАТЬ ЕЩЕ" на сайте https://www.onclinic.ru/services/ с помощью функций Lines.FromBinary и Web.Contents? либо с помощью каких-то других функций?
 
Добрый день!
Можно.
https://www.onclinic.ru/ajax/service/services.php?PAGEN_1=5&ajax=Y
где 5 в PAGEN_1=5 - это номер страницы. Перебирайте циклом все номера, сколько их там, получите все скрытые под кнопкой варианты.
 
Цитата
написал:
Добрый день!
Можно.
https://www.onclinic.ru/ajax/service/services.php?PAGEN_1=5&ajax=Y
где 5 в PAGEN_1=5 - это номер страницы. Перебирайте циклом все номера, сколько их там, получите все скрытые под кнопкой варианты.

Интересный способ, а можно ли в алгоритм внести весь диапазон страниц сразу?:
Код
let
    Источник = Table.FromColumns({Lines.FromBinary(Web.Contents("https://www.onclinic.ru/ajax/service/services.php?PAGEN_1=18&ajax=Y"))}),
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each Text.Contains([Column1], " <a href="""))
in
    #"Строки с примененным фильтром"
 
kush.near, можно
Цитата
whateverlover написал:
Перебирайте циклом все номера
читайте про циклы в PQ, List.Accumulate, List.Generate или их Вашего запроса сделайте функцию, создайте таблицу из одного столбца, состоящего из цифр, и эту цифру из столбца передавайте в Вашу функцию как аргумент
Реализовать сейчас нет времени, на работе
Изменено: whateverlover - 01.11.2022 12:22:16
 
Цитата
написал:
kush.near , можноЦитата whateverlover  написал:Перебирайте циклом все номерачитайте про циклы в PQ, List.Accumulate, List.Generate или и Вашего запроса сделайте функцию, создайте таблицу из одного столбца, состоящего из цифр, и эту цифру из столбца передавайте в Вашу функцию как аргументРеализовать сейчас нет времени, на работе
Благодарю. И последний момент, а где вы взяли ссылку такого вида? Если я вдруг столкнусь с такой проблемой на других сайтах?
 
kush.near, https://www.youtube.com/watch?v=DqtlR0y0suo&t=241s самый простой способ, как по мне, кроме браузера ничего не требуется
 
как то так:

Код
let
    pages = {1..15},
    table = Table.FromList(pages, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    new_column = Table.AddColumn(table, "fn", each fn([Column1], null)),
    expand_column = Table.ExpandListColumn(new_column, "fn"),
    fn = (value, s) =>
            let
                url = "https://www.onclinic.ru/ajax/service/services.php?PAGEN_1=" & Number.ToText(value),
                page = Lines.FromBinary(Web.Contents(url))
            in
                page,
    filtered_rows = Table.SelectRows(expand_column, each Text.Contains([fn], "<a href")),
    split = Table.SplitColumn(filtered_rows, "fn", Splitter.SplitTextByDelimiter(""">", QuoteStyle.None), {"fn.1", "fn.2"}),
    replace_value = Table.ReplaceValue(split,"</a>","",Replacer.ReplaceText,{"fn.2"}),
    replace_value1 = Table.ReplaceValue(replace_value,"<a href=""","https://www.onclinic.ru",Replacer.ReplaceText,{"fn.1"}),
    res = Table.TransformColumns(replace_value1,{{"fn.1", Text.Trim, type text}})
in
    res
 
Цитата
написал:
как то так:

Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18      let          pages = {1..15},          table = Table.FromList(pages, Splitter.SplitByNothing(), null, null, ExtraValues.  Error  ),          new_column = Table.AddColumn(table,   "fn"  , each fn([Column1], null)),          expand_column = Table.ExpandListColumn(new_column,   "fn"  ),          fn = (value, s) =>                  let                      url =   " https://www.onclinic.ru/ajax/service/services.php?PAGEN_1= "   & Number.ToText(value),                      page = Lines.FromBinary(Web.Contents(url))                  in                      page,          filtered_rows = Table.SelectRows(expand_column, each Text.Contains([fn],   "<a href"  )),          split = Table.SplitColumn(filtered_rows,   "fn"  , Splitter.SplitTextByDelimiter(  ""  ">"  , QuoteStyle.None), {  "fn.1"  ,   "fn.2"  }),          replace_value = Table.ReplaceValue(split,  "</a>"  ,  ""  ,Replacer.ReplaceText,{  "fn.2"  }),          replace_value1 = Table.ReplaceValue(replace_value,  "<a href="  ""  ,  " https://www.onclinic.ru "  ,Replacer.ReplaceText,{  "fn.1"  }),          res = Table.TransformColumns(replace_value1,{{  "fn.1"  , Text.Trim, type text}})    in          res   
 
Благодарю, работает. Судя по всему сам бы я не скоро справился.
 
Распространю вопрос на похожий случай, чтобы не плодить темы.

Как получить доступ к данным, которые отображаются при клике на услугу:
ссылка

Способ через F12->Network->XHR не работает.
 
Браузер выполняет POST запрос по адресу https://medsi.ru/api/2.0/clinic/list/
и в ответ получает все необходимые данные (33кБ) в формате JSON
А потом, когда вы кликаете на услуге, скрипт фильтрует ранее полученные данные, и отображает только нужное.
 
Цитата
написал:
Браузер выполняет POST запрос по адресу  https://medsi.ru/api/2.0/clinic/list/ и в ответ получает все необходимые данные (33кБ) в формате JSONА потом, когда вы кликаете на услуге, скрипт фильтрует ранее полученные данные, и отображает только нужное.
Я могу как-то получить доступ к этим данным через PQ?
 
Добрый день.

Еще один особенный случай, не могу разобраться: ссылка

Есть ли способ с помощью PQ получить доступ к данным, содержащимся под кнопкой "Далее"?

Удобоваримого вида ссылки не отображаются с помощью F12->Network->XHR. Может есть другой способ получения таких ссылок?
 
kush.near,

посмотрел содержимое через "DevTools".
Интересующие вас данные изначально присутствуют, и после нажатия кнопки "Далее" выводятся на экран.
Изменено: Neostt - 31.03.2023 14:48:54
 
Цитата
написал:
kush.near,

посмотрел содержимое через "DevTools".
Интересующие вас данные изначально присутствуют, и после нажатия кнопки "Далее" выводятся на экран.
В таком случае с помощью какой функции получить доступ к этим данным, если, при обращении к указанной ссылке, что Web.Contents, что Web.BrowserContents видят только те 5 строк, стоящие до этой кнопки?
 
kush.near,

Только что проверил. Web.Contents + Text.FromBinary - возвращают интересующую вас информацию.
Вы в заголовке запроса cookie передаете? Текст формата "\u041d\u043e\u0432\u043e\u0435 \u0432" декодировали?
 
Цитата
kush.near написал:
Еще один особенный случай, не могу разобраться
"Этих особенных случаев - целый Интернет, дописывать в  эту тему можно очень долго, поэтому каждый из них достоин отдельного исследования и обсуждения в отдельной теме на форуме.
 
Цитата
написал:
kush.near,

Только что проверил. Web.Contents + Text.FromBinary - возвращают интересующую вас информацию.
Вы в заголовке запроса cookie передаете? Текст формата "\u041d\u043e\u0432\u043e\u0435 \u0432" декодировали?
Ничего из этого не делал, так как с такой необходимостью сталкиваюсь, увы, впервые. Могу я вас попросить показать, как это выглядит в виде кода?

Адрес ссылки поменялся: Ссылка
Страницы: 1
Читают тему
Наверх