February 4, 2021

Программируем парсер на Python (модуль обхода ссылок на записи)

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

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

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

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

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

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

Ниже представляю часть содержимого конструктора класса ItemsParser и код метода get_items_params.

Код функции get_items_params:

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