Вы когда-нибудь пробовали парсить сайты недвижимости, но потом натыкались на стену CAPTCHA, ограничения по скорости, перенаправления или блокировки по IP? Это как выполнить всю сложную работу и застрять на финишной прямой.

Итак, если вы основатель, создающий платформу данных об аренде, или разработчик, просто пытающийся собрать списки в Excel для аналитики, такие препятствия могут стать камнем преткновения.

Но что, если бы существовал более чистый способ извлечения точных, структурированных данных о недвижимости без обычных проблем, которому доверяют более 70 000 команд разработчиков? Звучит как сказка, правда? Не совсем. Встречайте! Crawlbase, единственный инструмент, который вам когда-либо понадобится для веб-скрапинга на базе искусственного интеллекта.

Вот краткое руководство по автоматизации операций с недвижимостью с помощью... Crawlbase:

Пошаговое руководство по созданию парсера данных о недвижимости

В этом руководстве показано, как извлечь данные о недвижимости с двух сайтов недвижимости: поместье и Ре/макс. с помощью Crawlbase Crawling API. Мы извлечём такие данные, как цена, количество кроватей, количество ванных комнат, площадь в квадратных футах и ​​адрес, а затем экспортируем их в таблицу Excel.

Автоматизируйте недвижимость с помощью Crawlbase

Вам не нужно управлять прокси-серверами, CAPTCHA или рендерингом JavaScript. Crawlbase Мы сделаем всё это за вас. Итак, не беспокойтесь, приступим.

1. Предпосылки

Прежде чем начать, убедитесь, что у вас есть:

  • Node.js установлен
  • IDE/редактор кода по вашему выбору
  • A Crawlbase Crawling API токен → Получите это здесь (1000 бесплатных запросов)
  • Базовое понимание JavaScript/Node (достаточное для чтения функций)

2. Установите необходимые пакеты.

Откройте терминал и выполните:

1
2
инициализация npm -y
npm установить базу сканирования Cherio Exceljs

Эти пакеты обрабатывают:

  • Cheerio: Для извлечения контента из HTML, например jQuery
  • ExcelJS: для записи списков в файл Excel
  • Crawlbase: Для обхода CAPTCHA, блокировок и ограничений

3. Создайте файлы скриптов и импортируйте необходимые модули.

Сначала создайте 2 новых файла для 2 разных скриптов с названиями estately.js и remax.js. И вот как будет выглядеть структура вашего проекта:

Автоматизируйте недвижимость с помощью Crawlbase

Затем импортируйте необходимые библиотеки, вставив следующее вверху:

1
2
3
Const Привет = требовать('привет');
Const ExcelJS = требовать('exceljs');
Const { CrawlingAPI знак равно требовать('crawlbase');

Эти строки кода необходимы для обоих скриптов, поэтому не забудьте их добавить.

Теперь давайте посмотрим, что изменилось

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

  1. Сначала мы поделимся полным кодом функции для каждого скрипта.
  2. Во-вторых, вы посмотрите на код в целом и попробуете его
  3. Наконец, мы шаг за шагом разберём скрипт Estately. Поскольку оба скрипта имеют схожую структуру, понимание одного из них облегчит понимание другого.

1. Как получить скидку на недвижимость

Что оно делает:

  • Посещает объявления Estately о Кейп-Корале
  • Выписывает цену, количество кроватей, ванных комнат, кв. футов и адрес
  • Сохраняет все в Excel

Добавить эту функцию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Не забудьте добавить общую логику выше
(асинхронной () => {
стараться {
Const API = новый CrawlingAPI({ знак: «ВАШ ТОКЕН» });
Const URL = «https://www.estately.com/FL/Cape_Coral»;
Const ответ = Ждите пчелы.получить(URL-адрес);
Const html = ответ?.тело;
Const $ = привет.загрузка(html);

Const свойства = [];

$('div.result-item-details').каждый((я, картаЭл) => {
Const карта = $(cardEl);

Const цена = карта.найдите('p.result-price strong').текст().отделка();
Const ценаЗначение = анализироватьFloat(цена.заменить(/[^0-9.]/г, ''));

Const кровати = карта.найдите('ul.result-basics-grid li').eq(0).найдите(«Б»).текст().отделка();
Const ванны = карта.найдите('ul.result-basics-grid li').eq(1).найдите(«Б»).текст().отделка();
Const кв. фут = карта.найдите('ul.result-basics-grid li').eq(2).найдите(«Б»).текст().отделка();

Const адресПолный = карта.найдите('a.margin-0.small.limit-line-length').текст().отделка();

if (цена) {
свойства.протолкнуть.({
цена,
ценаСтоимость,
кровати,
ванны,
кв. футы,
address1: addressFull,
});
}
});

// Сортировать по цене
свойства.sort((а, б) => a.ценаСтоимость - b.ценаСтоимость);

// Записать в Excel
Const рабочая тетрадь = новый ExcelJS.Workbook();
Const лист = рабочая тетрадь.добавить рабочий лист('Характеристики');

лист.столбцы знак равно
{ заголовок: 'Цена', ключ: 'цена', ширина: 15 },
{ заголовок: «Кровати», ключ: 'кровати', ширина: 10 },
{ заголовок: «Бани», ключ: «ванны», ширина: 10 },
{ заголовок: 'кв. фут', ключ: 'кв. фут', ширина: 12 },
{ заголовок: 'Адрес', ключ: «адрес1», ширина: 30 },
];

свойства.Foreach((p) => лист.addRow(п));

Const метка времени = новый Время().toISOString().заменить(/[:.]/г, '-');
Const filePath = `estately_property_data_${timestamp}.xlsx`;

Ждите рабочая тетрадь.XLSX.записьФайл(путь_к_файлу);

консоль.журнал(`✅ Соскоблено и сохранено ${properties.length} свойства для ${filePath}`);
} поймать (ошибка) {
консоль.ошибка(`❌ Сбой при очистке: ${error.message}`);
}
}) ();

Теперь откройте терминал и запустите node estately.js, и посмотрите результаты:

Автоматизируйте недвижимость с помощью Crawlbase

В результате:

Автоматизируйте недвижимость с помощью Crawlbase

2. Как парсить Remax

Что оно делает:

  • Списки сдающихся в аренду домов Scrapes Re/Max в Лос-Анджелесе
  • Выписывает цену, количество кроватей, ванных комнат, кв. футов и адрес
  • Сортирует по цене и сохраняет в Excel

Добавить эту функцию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Не забудьте добавить общую логику выше
(асинхронной () => {
стараться {
Const API = новый CrawlingAPI({ знак: «ВАШ ТОКЕН» });
Const URL = «https://www.remax.com/homes-for-rent/ca/los-angeles/city/0644000»;
Const ответ = Ждите пчелы.получить(URL-адрес);
Const html = ответ?.тело;
Const $ = привет.загрузка(html);

Const свойства = [];

$('li[data-testid="d-li"]').каждый((я,) => {
Const карта = $(эл);

Const адрес = карта.найдите('ad-listing-card-address h3').текст().отделка();
Const цена = карта.найдите('span.d-listing-card-price-container h4').текст().отделка();
Const ценаЗначение = анализироватьFloat(цена.заменить(/[^0-9.]/г, ''));

Const кровати = карта.найдите('p:contains("Кровати") сильные').первый().текст().отделка();
Const ванны = карта.найдите('p:contains("Ванны") крепкие').первый().текст().отделка();
Const кв. фут = карта.найдите('p:contains("Sq Ft") strong').первый().текст().отделка();

if (цена и адрес) {
свойства.протолкнуть.({ цена, стоимость цены, кровати, ванные комнаты, кв. футы, адрес });
}
});

свойства.sort((а, б) => a.ценаСтоимость - b.ценаСтоимость);

Const рабочая тетрадь = новый ExcelJS.Workbook();
Const лист = рабочая тетрадь.добавить рабочий лист('Характеристики');

лист.столбцы знак равно
{ заголовок: 'Цена', ключ: 'цена', ширина: 15 },
{ заголовок: «Кровати», ключ: 'кровати', ширина: 10 },
{ заголовок: «Бани», ключ: «ванны», ширина: 10 },
{ заголовок: «Кв. фут», ключ: 'кв. фут', ширина: 12 },
{ заголовок: 'Адрес', ключ: 'адрес', ширина: 40 },
];

свойства.Foreach((p) => лист.addRow(п));

Const метка времени = новый Время().toISOString().заменить(/[:.]/г, '-');
Const filePath = `remax_property_data_${timestamp}.xlsx`;

Ждите рабочая тетрадь.XLSX.записьФайл(путь_к_файлу);
консоль.журнал(`✅ Соскоблено и сохранено ${properties.length} свойства для ${filePath}`);
} поймать (ошибка) {
консоль.ошибка(`❌ Ошибка: ${error.message}`);
}
}) ();

Теперь откройте терминал и запустите node remax.js, и посмотрите результаты:

Автоматизируйте недвижимость с помощью Crawlbase

Результаты:

Автоматизируйте недвижимость с помощью Crawlbase

Пошаговое объяснение сценария Estately

1. Импортируйте необходимые библиотеки.

  • Cheerio: анализирует и извлекает данные из HTML (как jQuery).
  • exceljs: помогает создавать и сохранять файлы Excel.
  • CrawlingAPI: Происходит от Crawlbase для загрузки/отображения страниц (особенно динамических).
1
2
3
Const Привет = требовать('привет');
Const ExcelJS = требовать('exceljs');
Const { CrawlingAPI знак равно требовать('crawlbase');

2. Запустите асинхронный IIFE

  • Выражение немедленно вызываемой функции (IIFE) используется для немедленного запуска асинхронного кода.
  • tryи catch обрабатывает любые ошибки во время выполнения.
1
2
3
4
5
6
7
(асинхронной () => {
стараться {
// ...
} поймать (ошибка) {
// ...
}
}) ();

3. Создавать Crawlbase API и веб-страница Fetch

  • Инициализирует CrawlingAPI с вашим API-токеном.
  • Ориентирован на объекты недвижимости в Кейп-Корал, Флорида, на сайте Estately.
  • response.body содержит HTML-содержимое страницы.
1
2
3
4
Const API = новый CrawlingAPI({ знак: «ВАШ ТОКЕН» });
Const URL = «https://www.estately.com/FL/Cape_Coral»;
Const ответ = Ждите пчелы.получить(URL-адрес);
Const html = ответ?.тело;

4. Загрузите HTML с помощью Cheerio

  • Загружает HTML в Cheerio для обхода DOM:
1
Const $ = привет.загрузка(html);

5. Извлечение данных о недвижимости

  • Находит все карточки недвижимости, используя div.result-item-details.
  • Для каждой карты:
    • Извлекает цену, затем удаляет $, ,, и т.д. для сортировки priceValue.
    • Получает кровати, ванны и кв. футы от <ul> > <li> структуры.
    • Извлекает адрес.
  • Помещает каждый структурированный объект свойства в properties массив.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Const свойства = [];

$('div.result-item-details').каждый((я, картаЭл) => {
Const карта = $(cardEl);

Const цена = карта.найдите('p.result-price strong').текст().отделка();
Const ценаЗначение = анализироватьFloat(цена.заменить(/[^0-9.]/г, ''));

Const кровати = карта.найдите('ul.result-basics-grid li').eq(0).найдите(«Б»).текст().отделка();
Const ванны = карта.найдите('ul.result-basics-grid li').eq(1).найдите(«Б»).текст().отделка();
Const кв. фут = карта.найдите('ul.result-basics-grid li').eq(2).найдите(«Б»).текст().отделка();

Const адресПолный = карта.найдите('a.margin-0.small.limit-line-length').текст().отделка();

if (цена) {
свойства.протолкнуть.({
цена,
ценаСтоимость,
кровати,
ванны,
кв. футы,
address1: addressFull,
});
}
});

6. Сортировать недвижимость по цене (по возрастанию)

  • Гарантирует, что более дешевые объекты будут представлены первыми.
1
свойства.sort((а, б) => a.ценаСтоимость - b.ценаСтоимость);

7. Создает файл Excel и добавляет данные

  • Инициализирует новую книгу и лист Excel:
1
свойства.sort((а, б) => a.ценаСтоимость - b.ценаСтоимость);
  • Определяет заголовки и ширину столбцов для файла Excel:
1
2
3
4
5
6
7
лист.столбцы знак равно
{ заголовок: 'Цена', ключ: 'цена', ширина: 15 },
{ заголовок: «Кровати», ключ: 'кровати', ширина: 10 },
{ заголовок: «Бани», ключ: «ванны», ширина: 10 },
{ заголовок: 'кв. фут', ключ: 'кв. фут', ширина: 12 },
{ заголовок: 'Адрес', ключ: «адрес1», ширина: 30 },
];
  • Добавляет каждый объект свойства как новую строку:
1
свойства.Foreach((p) => лист.addRow(п));

8. Сохраните файл с указанием имени и времени.

  • Форматирует текущую метку времени.
  • Сохраняет файл под уникальным именем.
1
2
3
4
Const метка времени = новый Время().toISOString().заменить(/[:.]/г, '-');
Const filePath = `estately_property_data_${timestamp}.xlsx`;

Ждите рабочая тетрадь.XLSX.записьФайл(путь_к_файлу);

9. Ведение журнала успешных и ошибочных действий

  • Сообщение об успешном завершении:
1
консоль.журнал(`✅ Соскоблено и сохранено ${properties.length} свойства для ${filePath}`);
  • Регистрирует любые ошибки, если очистка не удалась:
1
2
3
поймать (ошибка) {
консоль.ошибка(`❌ Сбой при очистке: ${error.message}`);
}

Заключение

Сбор данных о недвижимости не обязательно должен быть мучительным. Благодаря сочетанию Crawlbase + Cheerio + ExcelJS — вы получаете простой, масштабируемый процесс, который просто работает.

Вместо того чтобы защищаться от CAPTCHA и банов, вы должны иметь возможность создавать то, что хотите: ценностно-ориентированные инструменты, интеллектуальные панели управления или даже простые отчеты.

Если вы ищете способ надежного извлечения данных из сложных защищенных сайтов, Crawlbase единственный инструмент для веб-скрапинга, который вам когда-либо понадобится.