Добрый день.
Необходимо изменить функцию
так, чтобы она собирала табличные данные со списка URL
Функция сбора списка URL:
Проблема в том, что на сервере стоит защита от 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 #"Измененный тип" |
Код |
---|
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-аттак и, как я понял, она меня банит. Я не совсем понимаю механизм её работы и не знаю, как разбаниться, чтобы пробовать тестировать разные функции в попытках обхода защиты.
Мне интересны любые варианты решения данной задачи (разбитие запроса на несколько, введение задержки выполнения функции, макросы и тд.)