Пишем парсер в BAS!
Simba, @tvojkoshmarВсем привет!
Эту статью я написал в надежде помочь всем, только начавшим изучение БАСа и задающим много вопросов по поводу этого софта.
В процессе статьи научимся писать основные шаблоны для сайтов - парсеры, спамеры и тд. Это мы сделаем всеми возможными методами, которые только сайт нам позволит!
Также попытаюсь максимально подробно объяснить разницу между тем, в чем путался сам и ответить на наиболее часто встречаемые мне вопросы, научимся создавать спинтаксы, уравнения xPath и многое другое. Статья будет длинной, но главное, чтобы мои труды принесли тебе, читатель, пользу!
P.S. В конце статьи я приложу сам шаблон, чтобы Вы могли его поковырять и увидеть своими глазами.
Приступим!
*
В первую очередь находим исток, прощупываем его. Этот процесс хорошо описан в статье @morozkoVVV - https://yadi.sk/i/3odJiW9Su1x-OA
За шаблонный исток возьмём порнотьюб rexxx.org
*
Делать парсер на вебе - это извращение) поэтому сделаем его на запросах.
Создаем проект нажав кнопку "Запись"
*
Для начала нарисуем примерный макет будущего шаблона. Иметь он будет примерно такой вид:
- загружаем первую страницу с перечнем видео
- вытаскиваем с нее ссылки на видео
- записываем это в текстовик для дальнейшего применения
- переходим на следующую страницу
- повторяем пункт 2, 3 и 4.
Как это будет выглядеть в шаблоне?
Загружаем страницу: HTTP-клиент -> GET-запрос :
Параллельно открываем эту же страницу в окне обычного браузера и открываем код элемента.
В коде элемента нужная нам ссылка находится вот в таком селекторе

Составляем xPath уравнение.
Нужная нам ссылка находится в селекторе с классом 'a', в этом селекторе присутствует класс class=swp, а нужная нам ссылка - в элементе href. Уравнение xPath будет иметь следующий вид
//a[@class='swp']/@href
Уравнение составлено, необходимо проверить его работоспособность.
Идем в HTTP-клиент -> xPath получить каждый xml

В поле "xPath запрос" вписываем наше уравнение, жмем ОК и выводим в лог переменную, в которую мы сохранили собранные ссылки. Общая картина следующая:

Жмем зелёную
кнопочку и наблюдаем, выводятся ли нужные нам ссылки в лог:

Работает:)
После этого необходимо, чтобы все записывалось в текстовый файл.
Для этого выбираем действие "Записать список в файл", находящийся во вкладке "Файловая система".

В строку "путь к файлу" вставляем путь к какой-либо папке, после неё приписав \название документа.txt . Сам текстовик можно не создавать, БАС создаст его сам.
Галочка "дописывать файл" не даст обновлять каждый новый спаршенный список ссылок, а будет дописывать его. Галочка "Добавить символ окончания строки" будет записывать каждую ссылку с новой строки.
Но этого мало. По логике, шаблон соберёт только ссылки первой страницы. чтобы он собирал ссылки всех страниц смотрим, как изменяется ссылка при переходе на следующую страницу.
В нашем случае стартовая страница выглядит так - https://rexxx.org/?start=0
вторая выглядит так https://rexxx.org/?start=60 третья - https://rexxx.org/?start=120 и так далее. Ссылка постоянно изменяется на 60 в большую сторону.
Для этого в начале проекта устанавливаем переменную одноименным действием, находящимся по такому пути: Логика скрипта -> установить переменную
Задаем ей значение "0" и в конце проекта увеличиваем её на 60. Итого переменная у нас будет изменяться таким образом: 0-60-120-180-240... .
Подставляем нашу переменную в ссылку, заменяя число переменной. Получается у нас:
https://rexxx.org/?start=[[NEW_VARIABLE]]
Заменяем в GET-запросе чистую ссылку на ссылку с переменной.
Зацикливаем этот процесс посредством меток (в нашем случае они будут наилучшим вариантом).
В конечном итоге шаблон имеет вид:


Написать шаблон - это хорошо, но запустить его - еще лучше! Поэтому возвращаемся к зелёной
кнопочке, тыкаем её и наслаждаемся своими трудами.
*
*
Подведём итог: мы научились писать самый простенький шаблон парсера для сайта, который будет собирать данные в текстовый документ, который мы потом сможем использовать в дальнейшем.
Ссылка на шаблон:
https://drive.google.com/uc?id=160RbXLpMMMXeEwt8o_hmr_iVeujoFL37&export=download
Написано для канала МонтеТраф.