February 5, 2021

Раскрываем методику работы парсера на Python

Давайте  разберемся с деталями работы парсера страниц на Python,  предназначенного для скачивания информации  с сайтов размещения  объявлений либо освещения статистики спортивных мероприятий  (разрабатывали в нескольких статьях канала "властелин машин").

На первом этапе создается экземпляр класса для скачивания содержимого конкретного сайта (например,  UFCFightsParser или AvitoProductParser, которые наследуют общий функционал суперкласса ItemsParser). Затем запускается метод ItemsParser - start_items_parser, отвечающий за обход содержимого страниц (подробнее здесь).

При  этом экземпляр класса  инициализируется набором долгосрочных параметров  из конфигурационного файла (аналогично тому, как описано здесь),  а также краткосрочными параметрами, которые сохраняются в промежутках  между скачиваниями (например, в случае разрыва соединения с сайтом либо  принудительного останова со стороны пользователя).

В числе долгосрочных параметров общих для всех сайтов входят -  pages_load_stop_num  (максимальное количество скачанных с одного ip страниц, потом требуется  сменить адрес, чтобы не привлекать к себе внимание администрации  сайта), а также   rec_ign_bef_stop_max  (из-за искусственного подъема старых записей за деньги, чтобы  удостовериться в скачивании всех свежих записей, должны встретить  столько старых  перед остановом) и delay (задержка после одного  обращения к сайту). В число краткосрочных параметров, например для  класса UFCFightsParser, входят url  текущего события, номер скачиваемой страницы, количество уже скачанных  на текущей странице записей и ряд других (подробнее здесь).
Один  из важных краткосрочных параметров - дата последнего скачивания  (отвечает за прерывание программы в случае перебора всех свежих записей)  получает  start_items_parser. Последняя в цикле запускает get_items_params для обхода ссылок на записи на текущей странице (подробнее здесь), а затем get_next_url для получения url на новую страницу (подробнее здесь).

В свою очередь get_items_params вызывает get_one_item_params,  которая скачивает содержимое по заданной ссылке, возвращает словарь с данными, полученными из наборов тегов (подробнее здесь и здесь).

Условно схему взаимодействия этих функций можно изобразить на следующем рисунке: