Найти в Дзене
Властелин машин

Парсинг на Python с высоты птичьего полета

Если хотите скачивать содержимое сайтов с объявлениями, то вам сюда. Мы рассмотрим универсальную схему работы парсера таких ресурсов и приведем ссылки на подробное описание каждого структурного элемента. Это поможет вам адаптировать любой код под свои нужды.

Двигаясь от сложного к простому проще представить себе общую схему в виде набора функций, где одна занимается обходом страниц, другая - перебором ссылок с текущей страницы, третья - скачивает содержимое объявления по ссылке, четвертая - извлекает адрес новой страницы:

-2

В целях адаптации парсера для скачивания с разных сайтов этот функционал следует разбить и поручить разным модулям:

-3

Теперь рассмотрим подробнее, кто и за что отвечает:

-4

Старт работы парсера осуществляет start_items_parser, параметры которой зависят от конфигурационного файла и сохраненных значений после предыдущей остановки (конечно, если она была). Данная функция:

  • получает ссылки на текущей странице
  • запускает сбор этих ссылок (get_items_params)
  • извлекает и сохраняет новый url (get_next_url)

Остановка ее работы может быть вызвана, если:

  • скачано предельное количество страниц (pages_load_stop_num)
  • получен сигнал паузы (pause_flag, посылает обработку наверх)
  • из get_items_params поступает исключение NoMoreNewRecordsException (отсутствие новых записей)

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

Подробнее о работе start_items_parser можно прочитать здесь, а о работе функции получения нового url (get_next_url) здесь.

get_items_params отвечает за сбор информации со всех ссылок текущей страницы:

-5

В частности, get_items_params для всех ссылок на странице:

  • запускает get_one_item_params
  • заполняет поле items_list новыми записями
  • увеличивает поле пройденных записей records_pass_in_page_num на 1

Останов работы get_items_params возникает, если:

  • достигнуто rec_ign_bef_stop_num старых записей на странице (генерирует исключение NoMoreNewRecordsException, которое обрабатывается в start_items_parser)
  • получен сигнал паузы (pause_flag, посылает обработку наверх)

Подробнее о работе get_items_params я писал здесь.

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