Страницы: 1
RSS
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), пишите, контакты в профиле.
Страницы: 1
Читают тему
Наверх