Самая важная деталь в ходе парсинга веб-страниц
На данный момент мы реализовали значительную часть нашего парсера на Python в соответствии с указанной ниже схемой:
В частности, написали функции обхода страниц (подробнее здесь), перебора ссылок на записи на одной странице (подробнее здесь) и сбора данных по каждой ссылке на примере конкретного сайта (подробнее здесь). Также реализовали метод передачи адреса новой страницы в нестандартных ситуациях (подробнее здесь).
Принципиальным этапом является сохранение состояния в случае возникновения исключений, так как сайты, опасаясь проведения DDoS атак, защищаются, периодически разрывая соединение. Поэтому на этот случай необходимо все блоки программы, отвечающие за скачивание данных заключать в try/except с сохранением всех промежуточных результатов. При этом новый запуск программы должен также сопровождаться поиском сохраненного состояния для старта с места прерывания.
Например, для случая парсинга данных о проведенных поединках по смешанным единоборствам в рамках UFC, методы сохранения (save_class_params) и загрузки состояния (load_class_params) могли выглядеть следующим образом (реализованы в классе UFCFightsParser, привожу с конструктором для понимания значений полей):