Пишем парсер в BAS!

Пишем парсер в 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

Написано для канала МонтеТраф.

Админ канала @djakoma.


Report Page