#python #amazon-web-services #web-scraping #scrapy #aws-lambda
#python #amazon-веб-сервисы #очистка веб-страниц #scrapy #aws-lambda
Вопрос:
Я пытаюсь использовать scrapy в лямбда-функции AWS в качестве слоя.
Я использовал pip для установки scrapy в свой каталог:
pip install scrapy
формат каталога соответствует всем слоям, которые у меня уже есть.
Я заархивировал и загрузил в layers.
Я включил слой в лямбда-функцию.
Я импортирую scrapy:
import scrapy
и когда я запускаю проект, я получаю эту ошибку:
{
"errorMessage": "Unable to import module 'lambda_function'"
}
и
Unable to import module 'lambda_function': /opt/python/lxml/etree.so: invalid ELF header
Комментарии:
1. scrapy использует lxml. для lxml требуется собственный код (etree.so ). Не уверен, что это можно сделать с помощью Lambda
Ответ №1:
Как следует из комментария @balderman, для запуска scrapy вам нужны собственные библиотеки. Это очень выполнимо, я постараюсь объяснить как можно проще.
Двоичные файлы для scrapy должны быть скомпилированы в той же среде, что и экземпляр lambda. Lambda загружается с помощью AWS Linux.
Вы можете либо загрузить EC2 под управлением AmazonLinux, либо использовать docker, самый простой способ — загрузить контейнер docker.
$ sudo docker run -it amazonlinux bash
Теперь вам нужно загрузить / распаковать все .таким образом, файлы помещаются в каталог, а затем заархивируются. Кроме того, убедитесь, что вы сохранили все .таким образом, файлы внутри папки с именем lib внутри zip. После архивирования zip-файл должен выглядеть примерно так:
.
├── lib
│ ├── libcrypto.so.10
│ ├── libcrypto.so.1.0.2k
│ ├── libfontconfig.so.1
│ ├── libfontconfig.so.1.7.0
.......
Затем вы можете просто сжать его и загрузить как слой. Оно будет загружено в / opt / в ваш лямбда-контейнер. AWS ищет файлы библиотеки в /opt/lib среди многих других расположений.
Сложной частью для вас было бы выяснить, как получить все необходимые файлы .so, чтобы scrapy работал должным образом.