Парсинг любого сайта без доп. железок
Добавлено: 29 янв 2021, 00:13
Понадобилось "выковырять" с сайта одно слово, но html получался большого размера, а включенного компа 24/7 нет, вот, что "накостылил"
На примере сайта https://freevpn.me/accounts/ , там нам нужен пароль.
1) Создаем гугл таблицу с функцией в ячейкеи получаем следующее

2) Переходим в инструменты - редактор скриптов и пишем скрипт Меняем диапазон на свой, выглядит вот так

3) Жмем Начать развертывание - Новое - выбираем тип веб-приложение и доступ для всех (ранее тоже выдаем доступы когда просят) и получаем ссылку (примерно такую https://script.google.com/macros/s/AKfy ... oiDJw/exec при переходе которой видим следующее

Казалось бы это все, осталось достать пароль микротом, но он выдает ошибку так как гугл скрипты при переходе на ссылку генерирую другую ссылку и кидают на нее
4) На микротике делаем скрипт, который
- "фечит" первый раз, получает ошибку (в ней есть новая сгенерированная ссылка)
- записывает все в файл
- находит в файле нужную ссылку
- "фечит" второй раз и получает результат
- загоняет результат в переменную и изменяет ее для получения пароля
- удаляет файл
Далее уже дело за малым, "играться" с результатом как душе угодноПохоже на бред сумасшедшего
но опыт интересный
Уверен, есть более простой способ, например, делать все сразу через гугл скрипты (импортировать, парсить), но возможно это хороший задел на будущее, использовать гугл скрипты (а может и таблицы) + микротик...

На примере сайта https://freevpn.me/accounts/ , там нам нужен пароль.
1) Создаем гугл таблицу с функцией в ячейке
Код: Выделить всё
=IMPORTHTML("https://freevpn.me/accounts/"; "list"; "4")

2) Переходим в инструменты - редактор скриптов и пишем скрипт
Код: Выделить всё
function getData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Лист1');
var range = sheet.getRange("B5");
var result = range.getValues();
Logger.log(result);
return result;
}
function doGet() {
var data = getData();
if(!data) {
data = '';
}
return ContentService.createTextOutput(
JSON.stringify({'result': data})).setMimeType(ContentService.MimeType.JSON);
}

3) Жмем Начать развертывание - Новое - выбираем тип веб-приложение и доступ для всех (ранее тоже выдаем доступы когда просят) и получаем ссылку (примерно такую https://script.google.com/macros/s/AKfy ... oiDJw/exec при переходе которой видим следующее

Казалось бы это все, осталось достать пароль микротом, но он выдает ошибку так как гугл скрипты при переходе на ссылку генерирую другую ссылку и кидают на нее
4) На микротике делаем скрипт, который
- "фечит" первый раз, получает ошибку (в ней есть новая сгенерированная ссылка)
- записывает все в файл
- находит в файле нужную ссылку
- "фечит" второй раз и получает результат
- загоняет результат в переменную и изменяет ее для получения пароля
- удаляет файл
Далее уже дело за малым, "играться" с результатом как душе угодно
Код: Выделить всё
:local filepas "disk1/tempfile.txt"
# First request. Moved Temporarily 302. Fetch output to disk1/tempfile.txt
:local jobid [:execute script={/tool fetch url="https://script.google.com/macros/s/AKf546SGI5675479hrU7689789oiDJw/exec" output=user as-value} file=$filepas]
# Waiting for the end of the task, checking every 5 seconds
:while ([:len [/system script job find .id=$jobid ]] > 0) do={ delay 5s }
# Parsing disk1/tempfile.txt, retrieving url redirection
:local fetchOut [/file get $filepas contents]
:local startURL [:find $fetchOut "http" -1]
:local endURL [:find $fetchOut "\"> " startURL]
:local moveURL [:pick $fetchOut $startURL $endURL]
:global pass ([/tool fetch url=$moveURL output=user as-value]->"data")
# Parsing password
:global pass (:put [:pick $pass ([:find $pass "Password"]+11) [:find $pass "\"]"]])
/file remove $filepas

Уверен, есть более простой способ, например, делать все сразу через гугл скрипты (импортировать, парсить), но возможно это хороший задел на будущее, использовать гугл скрипты (а может и таблицы) + микротик...