Goldminer

Gold

Исходные файлы проекта расположены на Гитхабе. Там же подробная документация в Wiki-формате.

Cкрапер собирает с сайта www.forexpf.ru и биржевые цены драгоценных металлов, а также курсы валют. Результат может возвращаться либо как текст либо как JSON, формат задается аргументом командной строки.

Особенности архитектуры

Этого паука нельзя назвать вежливым (well-behaved), поскольку он притворяется человеком, используя хитрости, о которых шла речь в предыдущих заметках:

  • Выдерживает неравномерные паузы в рамках интервала от 2 до 5 минут (если в конфигурации не задано иное).
  • Умеет скрывать реальный IP-адрес, используя сеть Tor.
  • При очередном запросе представляется то одним, то другим браузером.

Тем не менее, в файле robots.txt сайта ботам не возбраняется ходить по адресам, которые использует Goldminer. Да и паузы от 2 до 5 минут — вполне вежливые. Бывают периоды когда цены не меняются на протяжении часов (в выходные, например). Так что, паузы можно установить на один или несколько порядков длиннее. Нетребовательность к производительности позволила обойтись без многопоточности. Зато эта программа способна работать бесперебойно неделями и месяцами, как выяснилось на проекте, для которого этот краулер был первоначально создан.

Прототип этой программы публиковал получаемые данные в хэше Redis, откуда они становились доступны другим компонентам системы. В текущей версии используется абстрактный класс Consumer ("потребитель"). Worker, отвечающий за сбор данных, не знает, что Consumer будет с ними делать. Пока что есть только один Consumer — он выводит данные в STDOUT. При необходимости можно создать другие: один будет публиковать данные в Redis, как когда-то, другой — формировать Excel-отчеты и т.д. Но не будем делать из мухи слона, как сказала project-менеджер последнего проекта когда я отказался за день до запуска менять структуру таблиц в базе данных.


social

Яндекс.Метрика