19 июля 2015 в 15:27

Использование morph.io для веб-парсинга перевод tutorial

Если вы читали предыдущие две статьи, Веб-парсинг на Ruby и Продвинутый парсинг веб-сайтов с Mechanize, то у вас есть базовые знания как написать парсер, который получает структурированные данные с веб-сайта.

Следующим логичным шагом будет запускать парсер регулярно, чтобы всегда иметь свежие данные. Этим как раз и занимается morph.io от талантливых людей из OpenAustralia.

Morph.io позиционирует себя как «Heroku для парсеров». Вы можете выбрать либо запускать парсеры вручную, или им работать автоматически каждый день. При этом вы можете использовать API для извлечения данных в JSON/CSV и использования их в своем приложении или скачать sqlite базу с данными.
Morph.io заполняет пробел, оставленный Scraperwiki Classic. Парсеры в morph.io хостятся на GitHub, что означает что вы можете их «форкнуть» и исправить в дальнейшем, если они перестанут работать.

image

Создание парсера


Мы будем использовать код из моего предыдущего поста, чтобы показать насколько легко запустить ваш парсер на morph.io.

Для входа на morph.io необходимо использовать ваш аккаунт GitHub. После авторизации вы можете создать парсер. На данный момент morp.io поддерживает парсеры написанные на Ruby, PHP, Python или Perl, выберите язык и задайте имя вашего парсера, свой я назвал pitchfork_scraper. Затем нажмите кнопку «Create Scraper» чтобы создать новый GitHub репозиторий содержащий скелет парсера в соответствии с языком, который вы выбрали.

Склонируйуте себе репозиторий, созданный на предыдущем шаге, в моем случае это выглядит так:

git clone https://github.com/chrismytton/pitchfork_scraper

Репозиторий будет содержать файлы 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 базу данных.

diff --git a/scraper.rb b/scraper.rb
index 2d2baaa..f8b14d6 100644
--- a/scraper.rb
+++ b/scraper.rb
@@ -1,6 +1,8 @@
 require 'mechanize'
 require 'date'
-require 'json'
+require 'scraperwiki'
+
+ScraperWiki.config = { db: 'data.sqlite', default_table_name: 'data' }
 
 agent = Mechanize.new
 page = agent.get("http://pitchfork.com/reviews/albums/")
@@ -34,4 +36,6 @@ reviews = review_links.map do |link|
   }
 end
 
-puts JSON.pretty_generate(reviews)
+reviews.each do |review|
+  ScraperWiki.save_sqlite([:artist, :album], review)
+end

Данный код использует метод ScraperWiki.save_sqlite чтобы сохранять обзор в базу данных. Первый аргумент это список полей, которые должны быть уникальными. В данном случае, мы используем артиста и альбом, так как маловероятно, что один и тот же артист выпустит два альбома с одним и тем же названием.
Чтобы запускать код локально, вам нужно установить Ruby гем scraperwiki в дополнение к зависимостям, которые уже есть.

gem install scraperwiki

Затем можно запускать код на локальной машине:

ruby scraper.rb

В результате создастся новый файл в текущей директории с названием data.sqlite, который будет содержать спарсенные данные.

Запуск парсера на morph.io


Теперь, когда мы сделали все необходимые изменения, можно запустить наш код на morph.io. Во-первых закоммитим наши изменения — git commit и отправим их в репозиторий git push.

Теперь можно запускать парсер и результат будет добавлен в базу данных на morph.io. Это должно выглядеть примерно так:
image
Как вы можете видеть, данные доступны авторизованным пользователям в формате JSON или CSV, или вы можете скачать sqlite базу данных и просмотреть её локально.

Код парсера доступен на GitHub. Вы можете видеть вывод парсера на morph.io. Учтите, что вам необходимо авторизоваться через GitHub чтобы получить доступ к самим данным и управлению через API.

Эта статья должна дать вам достаточный уровень знаний, чтобы начать хостить свои парсеры на morph.io. На мой взгляд, это удивительный сервис, который берет на себя хлопоты по эксплуатации и обслуживанию парсеров, позволяя вам сконцентрироваться на уникальных частях вашего приложения.

Вперед за структурированными данными из веба!

Все статьи серии:
Автор оригинала: Chris Mytton
Антон Рябов @tonymadbrain
карма
4,0
рейтинг 0,0
Системный администратор
Похожие публикации
Самое читаемое Разработка

Комментарии (7)

  • 0
    Спасибо за статью. А зачем вообще нужен этот morph.io? Почему не кронтаб?
    • 0
      Всегда пожалуйста. Ну для крона нужен отдельный сервер, а тут тебе все в облаке и без «ковыряний» в unix/linux ОС.
  • 0
    Крайне удивился не увидев Node.js. Но он есть, правда пока без документации: morph.io/documentation/nodejs
    • 0
      Да, я видел что node.js есть в списке, но в оригинальной статье он не упоминался, поэтому я тоже добавлять на стал :)
  • 0
    не хочу показаться занудой, но наверное все таки опечатка: " Как вы можете видеть, данные доступны авторизованным пользователям в формате JSON или SCV"… может быть все таки JSON и CSV? :)
    • 0
      все в порядке, спасибо за замечание, исправил.
  • 0
    Интересный сервис! Мне нравится идея с гитхабом, только теперь надо, чтобы кто-то сделал штуку позволяющую создавать парсеры визуально. Например как в сервисе import.io, там Вы можете установить браузер и накидывать настройки аля что, откуда и куда (как складировать) парсить, тоже есть бесплатный план, но они сильно закрытые и нету возможности кастомизации. Вот если бы сделать апликуху позволяющую рендерить парсеры для морфа — было бы очень круто!

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.