Если хотите скачивать содержимое сайтов с объявлениями, то вам сюда. Мы рассмотрим универсальную схему работы парсера таких ресурсов и приведем ссылки на подробное описание каждого структурного элемента. Это поможет вам адаптировать любой код под свои нужды.
Двигаясь от сложного к простому проще представить себе общую схему в виде набора функций, где одна занимается обходом страниц, другая - перебором ссылок с текущей страницы, третья - скачивает содержимое объявления по ссылке, четвертая - извлекает адрес новой страницы:
В целях адаптации парсера для скачивания с разных сайтов этот функционал следует разбить и поручить разным модулям:
Теперь рассмотрим подробнее, кто и за что отвечает:
Старт работы парсера осуществляет 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 отвечает за сбор информации со всех ссылок текущей страницы:
В частности, 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 запускается для одного объявления и считывает информацию из характерных для сайта тегов. Она является структурным элементом специфического модуля. Подробнее о работе функции с примером использования можно прочитать здесь.