
Парсим статьи и публикуем в блоге №1
12 февраля 2025 г. 16:32
Вот пример кода на Python с использованием Django для парсинга статей и публикации их в блоге. Этот код предполагает, что у вас уже настроена модель Post в вашем Django приложении. Я старался добавить как можно больше комментариев для понимания логики. Пожалуйста, адаптируйте его под ваши конкретные нужды и структуру данных.
# Пример использования (замените URL и селекторы на ваши значения)
# Предполагаем, что у вас есть задача Celery или Cron, которая вызывает эту функцию.
# Этот блок позволяет запускать скрипт напрямую для тестирования
# В реальной среде лучше использовать Celery, Cron или другой планировщик задач.
main()
Важные замечания и что нужно адаптировать:
Модель Post: Убедитесь, что у вас есть модель Post в вашем приложении Django. Она должна содержать поля title, content, author (или author_id, если у вас связь с моделью User), и publication_date. Пример модели:
Селекторы CSS: Самое важное – правильно определить CSS-селекторы (title_selector и content_selector). Используйте инструменты разработчика в вашем браузере (обычно вызываются клавишей F12) для инспектирования HTML-кода целевой страницы и определения подходящих селекторов. Важно, чтобы селекторы были достаточно точными, чтобы извлекать только нужный контент. Если контент находится внутри нескольких вложенных тегов, возможно, потребуется использовать более сложные селекторы.
Обработка ошибок: Код содержит базовую обработку исключений для сетевых ошибок и ошибок парсинга. В реальном проекте может потребоваться более детальная обработка, логирование ошибок и механизмы повторных попыток.
Форматирование контента: Метод .prettify() сохраняет HTML-форматирование. Если вам нужно другое форматирование (например, очистка от HTML-тегов и сохранение только текста), вам потребуется изменить логику извлечения и обработки контента. Можно использовать get_text() вместо prettify(), но тогда все HTML-теги будут удалены.
Планирование задач: Не рекомендуется запускать этот код непосредственно в Django views, так как парсинг может занять много времени и заблокировать основной процесс. Используйте Celery, Django-Q, APScheduler или Cron для запуска парсинга в фоновом режиме. main() - это просто пример для локального тестирования.
Robots.txt: Всегда проверяйте файл robots.txt на целевом сайте, чтобы убедиться, что вам разрешено парсить его контент. Соблюдайте правила парсинга и уважайте владельцев сайтов.
Задержки запросов: Добавляйте задержки между запросами, чтобы не перегружать сервер целевого сайта. Используйте time.sleep() для этого.
User-Agent: Укажите User-Agent в заголовке запроса, чтобы представляться обычным браузером. Это может помочь избежать блокировки со стороны сервера.
Обработка динамического контента: Если сайт использует JavaScript для загрузки контента, вам может потребоваться использовать более продвинутые инструменты, такие как Selenium или Puppeteer, для рендеринга страницы перед парсингом. Это значительно усложнит код.
Django settings: Убедитесь, что у вас правильно настроены Django settings (например, TIME_ZONE).
Этот код предоставляет отправную точку. Вам, вероятно, потребуется внести значительные изменения в зависимости от структуры целевого сайта и ваших требований. Тщательно тестируйте и адаптируйте код, чтобы он работал правильно и не нарушал правила парсинга.
Пока комментариев нет.