Раскрываем методику работы парсера на 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, которая скачивает содержимое по заданной ссылке, возвращает словарь с данными, полученными из наборов тегов (подробнее здесь и здесь).
Условно схему взаимодействия этих функций можно изобразить на следующем рисунке: