Страница 1 из 1

Парсинг любого сайта без доп. железок

Добавлено: 29 янв 2021, 00:13
sifonka
Понадобилось "выковырять" с сайта одно слово, но html получался большого размера, а включенного компа 24/7 нет, вот, что "накостылил" ;;-)))
На примере сайта 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
Похоже на бред сумасшедшего :ps_ih: но опыт интересный
Уверен, есть более простой способ, например, делать все сразу через гугл скрипты (импортировать, парсить), но возможно это хороший задел на будущее, использовать гугл скрипты (а может и таблицы) + микротик...

Re: Парсинг любого сайта без доп. железок

Добавлено: 29 янв 2021, 07:49
pepelxl
Для данной задачи перебор. Mikrotik прекрасно может получить весь html и распарсить его. Хотя для вашей цели достаточно найти нужный блок через find.
А вот если пасс в виде картинки , то вполне достойное решение, хотя про него писали ещё года 3-4 назад.

Re: Парсинг любого сайта без доп. железок

Добавлено: 29 янв 2021, 19:07
podarok66
Я в своё время использовал вот эту https://habr.com/ru/post/475856/ статью. Всё работало на ура. Как сейчас, не знаю.

Re: Парсинг любого сайта без доп. железок

Добавлено: 29 янв 2021, 22:16
Sertik
Это работает на ура и сейчас. Вы (podarok66) тогда помогли настроить функцию в Google App Script. Чупака гений !

А ещё есть его гениальный JSON-парсер для Микротик. https://github.com/Winand/mikrotik-json-parser
Также работает отлично и выручает меня всегда. Особенно в работе с оборудованием, возвращающим данные в JSON. Сейчас пишу библиотеку функций для стереоресивера URRI. viewtopic.php?f=16&t=12453
Парсер JSON Чупакабры очень там пригодился, низкий ему за него поклон.