Вопрос или проблема
Я пишу краулер, используя библиотеку 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, действительно требует детального разбора. Давайте разложим проблему по полочкам, чтобы найти возможные причины и решения.
Факторы, влияющие на сканирование
-
Форматирование URL: Вы заметили, что добавление или отсутствие завершающего слэша в URL существенно влияет на результаты сканирования. Это связано с тем, как Amazon S3 обрабатывает запросы к объектам. В частности:
- URL с завершающим слэшом (
/
) указывает на каталоги, что активирует механизм индексации S3, возвращающий содержимое папки (то есть все файлы в ней). - URL без завершающего слэша может восприниматься как ссылка на файл. Если S3 не находит соответствующий файл (например,
index.html
), он может не возвращать желаемые данные. - Запросы на URL, которые заканчиваются на
index.html
, могут возвращать данные только для этого конкретного файла, что также ограничивает возможность сканирования.
- URL с завершающим слэшом (
-
Индексация и доступ к файлам: Обратите внимание, что в S3 можно настроить публичный доступ к некоторым объектам в ведре. Убедитесь, что правильно настроены разрешения и политики доступа для вашего S3 ведра, чтобы Crawlee и Puppeteer могли извлекать данные.
-
Статические сайты и конфигурация сервера: Разные генераторы статических сайтов могут управлять URL по-разному. Если документация генерируется с помощью различных инструментов, стоит убедиться, что все они совместимы и используют единый подход к маршрутизации.
Решения для вашего кода
Для повышения эффективности работы вашего сканера, рекомендуется:
-
Использование правил для формата URL: Обеспечьте правильное форматирование URL, добавляя завершающий слэш для всех запросов или же реализуйте функцию обработки и нормализации URL перед их передачей в Crawlee.
-
Мониторинг ответов S3: Добавьте обработчик, который будет логировать, какие запросы и ответы получает ваш сканер. Это поможет вам быстро выявлять проблемные области и отслеживать, как S3 реагирует на различные форматы URL.
-
Проверка настроек вашего VPC и безопасности S3: Убедитесь, что настройки вашего VPC позволяют вашему crawler’у получать доступ к ресурсам S3, и что в политике безопасности нет каких-либо ограничений, которые могли бы препятствовать этому.
Заключение
Хотя проблема, с которой вы столкнулись, может показаться простой, она на самом деле является довольно сложной из-за множества факторов, связанных с S3, обработкой URL и генерацией контента для статических сайтов. Следуя приведенным рекомендациям и стратегиям, вы сможете улучшить работу вашего сканера и сделать его более устойчивым к различным конфигурациям сайтов. Если у вас есть возможность, предоставьте код вашего сканера, чтобы можно было провести более глубокий анализ и предложить улучшения.