Crawlee Puppeteer не может проиндексировать все ссылки на странице, когда веб-сайт размещен на AWS S3.

Вопрос или проблема

Я пишу краулер, используя библиотеку crawlee от apify и puppeteer. Этот вопрос может быть решён кем-то, кто разбирается в AWS / S3. В основном это используется для обхода внутренней документации, чтобы её можно было сделать доступной для поиска внутри компании. Из-за некоторых ограничений безопасности, которые вне моего контроля, краулер не может напрямую получить доступ к сайту, на котором размещены документы. Чтобы обойти это, я копирую их в ведро S3, которое находится в той же VPC, и направляю краулер на него.

Это работает достаточно хорошо, за исключением того, что я заметил, что он очень чувствителен к URL в некоторых случаях. Эта документация не просто «один сайт», использующий одну и ту же технологию. Это множество различных статических сайтов, все размещённые на одном сервере, использующих разные генераторы статических сайтов. Для некоторых сайтов, когда я отправляю URL краулеру, он должен быть отформатирован ТОЧНО так:

<aws-s3-bucket-domain>/org-name/team-name/branch-name/

Если вы отправите следующее, он будет обходить главную страницу, не найдёт никаких других ссылок и завершит работу:

<aws-s3-bucket-domain>/org-name/team-name/branch-name (без завершающего /)

<aws-s3-bucket-domain>/org-name/team-name/branch-name/index.html (.index.html)

Странно, но он всё ещё обходит главную страницу, просто не находит никаких других ссылок, как это происходит, когда вы отправляете её с завершающим /, то есть

<aws-s3-bucket-domain>/org-name/team-name/branch-name/some_other_page_linked_in_index/

Это проблема с S3, как опция, которую мне нужно включить? К сожалению, я не могу контролировать содержание статических сайтов. Вполне возможно, что генераторы сайтов обрабатывают URL странно.

Я могу включить код веб-краулера, если это необходимо.

Ответ или решение

Вопрос, с которым вы столкнулись при использовании библиотеки Crawlee и Puppeteer для сканирования статических сайтов, размещенных на AWS S3, действительно требует детального разбора. Давайте разложим проблему по полочкам, чтобы найти возможные причины и решения.

Факторы, влияющие на сканирование

  1. Форматирование URL: Вы заметили, что добавление или отсутствие завершающего слэша в URL существенно влияет на результаты сканирования. Это связано с тем, как Amazon S3 обрабатывает запросы к объектам. В частности:

    • URL с завершающим слэшом (/) указывает на каталоги, что активирует механизм индексации S3, возвращающий содержимое папки (то есть все файлы в ней).
    • URL без завершающего слэша может восприниматься как ссылка на файл. Если S3 не находит соответствующий файл (например, index.html), он может не возвращать желаемые данные.
    • Запросы на URL, которые заканчиваются на index.html, могут возвращать данные только для этого конкретного файла, что также ограничивает возможность сканирования.
  2. Индексация и доступ к файлам: Обратите внимание, что в S3 можно настроить публичный доступ к некоторым объектам в ведре. Убедитесь, что правильно настроены разрешения и политики доступа для вашего S3 ведра, чтобы Crawlee и Puppeteer могли извлекать данные.

  3. Статические сайты и конфигурация сервера: Разные генераторы статических сайтов могут управлять URL по-разному. Если документация генерируется с помощью различных инструментов, стоит убедиться, что все они совместимы и используют единый подход к маршрутизации.

Решения для вашего кода

Для повышения эффективности работы вашего сканера, рекомендуется:

  • Использование правил для формата URL: Обеспечьте правильное форматирование URL, добавляя завершающий слэш для всех запросов или же реализуйте функцию обработки и нормализации URL перед их передачей в Crawlee.

  • Мониторинг ответов S3: Добавьте обработчик, который будет логировать, какие запросы и ответы получает ваш сканер. Это поможет вам быстро выявлять проблемные области и отслеживать, как S3 реагирует на различные форматы URL.

  • Проверка настроек вашего VPC и безопасности S3: Убедитесь, что настройки вашего VPC позволяют вашему crawler’у получать доступ к ресурсам S3, и что в политике безопасности нет каких-либо ограничений, которые могли бы препятствовать этому.

Заключение

Хотя проблема, с которой вы столкнулись, может показаться простой, она на самом деле является довольно сложной из-за множества факторов, связанных с S3, обработкой URL и генерацией контента для статических сайтов. Следуя приведенным рекомендациям и стратегиям, вы сможете улучшить работу вашего сканера и сделать его более устойчивым к различным конфигурациям сайтов. Если у вас есть возможность, предоставьте код вашего сканера, чтобы можно было провести более глубокий анализ и предложить улучшения.

Оцените материал
Добавить комментарий

Капча загружается...