07.04.2024: Эта статья изначально была опубликована на habr.com и была просмотрена там 17 тысяч раз. Но теперь я решил перенести её в свой блог.
От переводчика: Оригинал статьи Web scraping with morph.io
Обзор
Если вы читали предыдущие две статьи, Веб-парсинг на Ruby и Продвинутый парсинг веб-сайтов с Mechanize, то у вас есть базовые знания как написать парсер, который получает структурированные данные с веб-сайта.
Следующим логичным шагом будет запускать парсер регулярно, чтобы всегда иметь свежие данные. Этим как раз и занимается morph.io от талантливых людей из OpenAustralia.
Morph.io позиционирует себя как “Heroku для парсеров”. Вы можете выбрать либо запускать парсеры вручную, или им работать автоматически каждый день. При этом вы можете использовать API для извлечения данных в JSON/CSV и использования их в своем приложении или скачать sqlite базу с данными.
Morph.io заполняет пробел, оставленный Scraperwiki Classic. Парсеры в morph.io хостятся на GitHub, что означает что вы можете их “форкнуть” и исправить в дальнейшем, если они перестанут работать.
Создание парсера
Мы будем использовать код из моего предыдущего поста, чтобы показать насколько легко запустить ваш парсер на morph.io.
Для входа на morph.io необходимо использовать ваш аккаунт GitHub. После авторизации вы можете создать парсер. На данный момент morp.io поддерживает парсеры написанные на Ruby, PHP, Python или Perl, выберите язык и задайте имя вашего парсера, свой я назвал pitchfork_scraper
. Затем нажмите кнопку “Create Scraper” чтобы создать новый GitHub репозиторий содержащий скелет парсера в соответствии с языком, который вы выбрали.
Склонируйуте себе репозиторий, созданный на предыдущем шаге, в моем случае это выглядит так:
Репозиторий будет содержать файлы README.md
и scraper.rb
.
Morph.io ожидает две вещи от парсера. Первое - репозиторий парсера должен содержать файл scraper.rb
для Ruby парсеров, второе - сам парсер должен писать в sqlite базу данных, которая называется data.sqlite
.
Соответственно для парсера на Python файл должен называться - scraper.py, для PHP - scraper.php, a для Perl - scraper.pl.
Для того чтобы добавить это в наш парсер, нужно внести небольшие изменения чтобы выводить данные в базу sqlite, а не в STDOUT в виде JSON.
Для начала нужно добавить код из предыдущей статьи в наш scraper.rb
, затем нужно изменить код так, чтобы он использовал гем scraperwiki
чтобы записывать данные в sqlite базу данных.
Данный код использует метод ScraperWiki.save_sqlite
чтобы сохранять обзор в базу данных. Первый аргумент это список полей, которые должны быть уникальными. В данном случае, мы используем артиста и альбом, так как маловероятно, что один и тот же артист выпустит два альбома с одним и тем же названием.
Чтобы запускать код локально, вам нужно установить Ruby гем scraperwiki
в дополнение к зависимостям, которые уже есть.
Затем можно запускать код на локальной машине:
В результате создастся новый файл в текущей директории с названием data.sqlite
, который будет содержать спарсенные данные.
Запуск парсера на morph.io
Теперь, когда мы сделали все необходимые изменения, можно запустить наш код на morph.io. Во-первых закоммитим наши изменения - git commit
и отправим их в репозиторий git push
.
Теперь можно запускать парсер и результат будет добавлен в базу данных на morph.io. Это должно выглядеть примерно так:
Как вы можете видеть, данные доступны авторизованным пользователям в формате JSON или CSV, или вы можете скачать sqlite базу данных и просмотреть её локально.
Код парсера доступен на GitHub. Вы можете видеть вывод парсера на morph.io. Учтите, что вам необходимо авторизоваться через GitHub чтобы получить доступ к самим данным и управлению через API.
Эта статья должна дать вам достаточный уровень знаний, чтобы начать хостить свои парсеры на morph.io. На мой взгляд, это удивительный сервис, который берет на себя хлопоты по эксплуатации и обслуживанию парсеров, позволяя вам сконцентрироваться на уникальных частях вашего приложения.
Вперед за структурированными данными из веба!
Все статьи серии:
- Веб-парсинг на Ruby
- Продвинутый парсинг веб-сайтов с Mechanize
- Использование morph.io для веб-парсинга (вы здесь)