Этот серверный полиглот для парсинга - MetaCall
Table Of Content
MetaCall - это инструмент, который позволяет смешивать языки. Вы можете создавать полиглотные приложения с его помощью. В этой статье мы покажем вам пример полиглотного приложения пошагово, используя BeautifulSoup (Python) вместе с сервером Express (NodeJS), чтобы создать API для парсинга.
Давайте вместе пройдем процесс установки, чтобы увидеть, насколько легко с ним работать. Сначала склонируйте репозиторий:
git clone [https://github.com/metacall/beautifulsoup-express-example](https://github.com/metacall/beautifulsoup-express-example)
Затем нам нужно установить MetaCall. MetaCall распространяется различными способами, включая Docker, Guix или Installer. Он высоко портативен, поэтому должен работать на любой системе Linux. Установим его:
curl -sL [https://raw.githubusercontent.com/metacall/install/master/install.sh](https://raw.githubusercontent.com/metacall/install/master/install.sh) | sh
Теперь у нас есть доступ к команде metacall
, которая представляет собой полноценный интерфейс командной строки (CLI) для разработки полиглотных приложений.
После этого мы должны установить зависимости. Со стороны Python нам нужно установить зависимость BeautifulSoup
для парсинга и зависимость certify
для запроса HTTPS-веб-страниц.
metacall pip3 install beautifulsoup4 certifi
Со стороны NodeJS нам нужно установить express
для нашего сервера и metacall
в качестве пакета для вызова Python.
metacall npm install metacall express
MetaCall использует свои собственные версии npm
и pip
, чтобы избежать загрязнения системы и обеспечить портабельность. Поэтому мы добавляем префикс metacall
ко всем командам менеджера пакетов, хотя синтаксис остается тем же.
Отлично. Мы закончили с утомительной и скучной частью. Пришло время изучить, что делает приложение и как магически смешиваются языки программирования.
На стороне NodeJS мы видим скрипт [index.js](https://github.com/metacall/beautifulsoup-express-example/blob/master/index.js)
. Он реализует сервер Express, но также использует пакет metacall
для загрузки скрипта [scraping.py](https://github.com/metacall/beautifulsoup-express-example/blob/master/scraping.py)
.
Первые две строки (строки 2 и 5) загружают Python-скрипт. На этом этапе вы можете легко вызывать функции из scraping.py
с помощью функции metacall
. Мы делаем именно это в обработчике нашего REST API в сервере Express (строка 14). Мы используем metacall('links')
, чтобы вызвать функцию links
, которая реализована в скрипте [scraping.py](https://github.com/metacall/beautifulsoup-express-example/blob/master/scraping.py)
.
Функция links
принимает URL, который открывается и запрашивается для получения HTML (строки 8-17). Затем инициализируется BeautifulSoup
для парсинга HTML (строка 20), а затем получаются все ссылки на веб-странице (строки 23-26).
Легко-прелегко.
Теперь пришло время протестировать это и увидеть, как это происходит. Чтобы запустить наше приложение, мы просто выполняем:
metacall index.js
MetaCall запустит index.js
и запустит сервер Express. Логи будут передаваться в $HOME/metacall.log
, а сервер будет слушать порт 3000
, чтобы мы могли использовать curl
для его запроса. Давайте спарсим все ссылки с веб-сайта NPM:
curl localhost:3000/?url=https://www.npmjs.com/
Если все прошло хорошо, мы должны увидеть в ответе что-то подобное:
["https://docs.npmjs.com","https://npm.community","https://go.npmjs.com/npm-pkgsafe","https://docs.npmjs.com","https://npm.community","https://www.npmjs.com/advisories","http://status.npmjs.org/","https://blog.npmjs.org/"]
Для группы DevOps и в пользу контейнеризации мы также предоставляем версию в контейнере приложения, которая включает автоматическое тестирование. Его можно построить и запустить с помощью следующих команд:
docker build -t metacall/beautifulsoup-express-example .
docker run --rm -p 3000:3000 -it metacall/beautifulsoup-express-example
Наконец, мы добавили файл [metacall.json](https://github.com/metacall/beautifulsoup-express-example/blob/master/metacall.json)
, который является конфигурацией, используемой для развертывания в MetaCall FaaS. В этой версии мы используем только Python-скрипт, потому что MetaCall FaaS способен экспортировать функции и автоматически генерировать API Gateway, поэтому сервер Express не нужен, и мы также получим более высокую производительность, потому что наш FaaS-сервер реализован с учетом высокой производительности и параллелизма.
Таким образом, мы можем развернуть это как автономное приложение на любой платформе или через высокомасштабируемый FaaS. Если вы хотите попробовать платформу MetaCall FaaS, она находится в бета-тестировании и доступна только по предварительному доступу (вы можете запросить доступ на https://metacall.io).
Для получения дополнительной информации о MetaCall или чтобы стать частью нашего сообщества, вы можете присоединиться к нашей Telegram Group.
Исходный код лицензирован Apache 2.0 License и может быть найден по адресу: https://github.com/metacall/beautifulsoup-express-example.
Увидимся, мета-программист!
Висенте Эдуардо Феррер Гарсия. Основатель и технический директор MetaCall.