CoderCastrov logo
CoderCastrov
Парсер

Использование Elixir и Crawly для мониторинга цен

Использование Elixir и Crawly для мониторинга цен
просмотров
3 мин чтение
#Парсер

В одной из предыдущих статей мы обсудили, почему можно захотеть извлекать данные из Интернета. Теперь пришло время быть более конкретным и продемонстрировать один из возможных случаев использования - "рынок недвижимости".

Немного о рынке недвижимости

Рынок недвижимости является высококонкурентным рынком, где множество компаний пытаются привлечь одного и того же клиента. Поскольку количество объявлений о недвижимости в интернете постоянно растет, важность общедоступных данных также играет большую роль. Те, кто сможет использовать эти данные, выиграют клиентов.

Постановка задачи

Представьте, что вы - агент по недвижимости, заинтересованный в наборе объектов, доступных через несколько веб-сайтов. Вы нашли несколько вариантов для своего клиента, но теперь пришло время немного следить за ними, чтобы увидеть, как меняются цены со временем, так как это может помочь вам получить полезные идеи, которые помогут вашему клиенту сделать выбор.

Целевые веб-сайты

Поскольку мы находимся в Швеции, давайте предположим, что вам нужна информация с двух веб-сайтов:

Мы проверили файлы robots.txt для обоих веб-сайтов, чтобы понять желаемый способ извлечения данных. Похоже, что для обычных веб-скраперов нет особых ограничений, и мы можем продолжать извлекать данные.

Чтобы быть конкретным, давайте определим краткий список URL-адресов с обоих веб-сайтов для мониторинга:

https://www.booli.se/annons/4060796

https://www.booli.se/annons/4060561

https://www.booli.se/annons/4060535

https://www.hemnet.se/bostad/lagenhet-1,5rum-centrala-solna-solna-kommun-klippgatan-12c,-4-tr-17141535

https://www.hemnet.se/bostad/lagenhet-2rum-solna-centrum-solna-kommun-centrumslingan-45,-4tr-17116400

Обратите внимание, что оба веб-сайта являются очень динамичными, поэтому возможно, что эти объекты станут недоступными к моменту, когда вы прочтете эту статью.

Извлечение цен с помощью Crawly

Давайте используем фреймворк для парсинга Crawly для извлечения этих данных. В этом примере нам обычно нужно получить данные с заранее определенного набора страниц для решений по мониторингу цен. Поэтому мы будем использовать один модуль Spider для всех ссылок. Давайте начнем!

Запуск проекта

Теперь, когда у нас есть задача, настроим все, выполнив следующие шаги из Руководства по быстрому старту:

mix new price_monitoring -- sup
  1. Добавьте Crawly и Floki в файл mix:
defp deps() do
 [
   {:crawly, "~> 0.12.0"},
   {:floki, "~> 0.26.0"}
 ]
end

Извлечение данных с нескольких сайтов

Наконец, нам нужно выполнить 3 шага, чтобы завершить проект!

Здесь вы можете видеть, что по сравнению с предыдущей настройкой статьи, посвященной решению проблемы аутентификации, мы исключили Crawly.Middlewares.DomainFilter **промежуточное ПО. Мы собираемся разбирать заданный набор URL-адресов напрямую, поэтому нет необходимости фильтровать их каким-либо образом.

  1. Определите API высокого уровня

Как вы можете видеть, наша функция start отправляет список URL-адресов в паук. Технически функция start может просто считывать их из базы данных, которую у вас уже есть, что сделает это еще более гибким!

Обратите внимание, что текущая версия Crawly (которая на момент создания статьи является 0.12.0) имеет известную ошибку, которая мешает инициализации с неограниченно большими наборами URL-адресов. Поэтому по крайней мере сейчас невозможно отправить 100_000 или больше. Пожалуйста, будьте снисходительны к нам :). Crawly - это библиотека с открытым исходным кодом, у которой, как и у любого другого проекта, есть свои ошибки. Однако мы стараемся работать над ее стабильностью!

  1. Определите файл паука: spider.ex

Теперь мы наконец можем запустить наш краулер с помощью:

PriceMonitoring.start()

что позволит нам получить данные (которые по умолчанию хранятся в папке /tmp (см. нашу конфигурацию config.exs для получения подробной информации))

Выводы

В этой статье показано, как создать паука для мониторинга информации о ценах с нескольких веб-сайтов недвижимости. Исходный код для проекта доступен на GitHub.

Хотите узнать больше?

Вам все это кажется слишком сложным, и вы хотите узнать, как начать работу с Crawly? Пожалуйста, взгляните на наше руководство по началу работы!

Вы можете найти больше статей, описывающих использование Crawly, по моему ссылке на Medium. Также попробуйте наше решение для управления пауками!