你是否曾经尝试抓取房地产网站的数据,却遭遇验证码、速率限制、重定向或IP封禁等重重阻碍?这就像付出了所有努力,却在终点线前被困住了一样。

因此,如果您是一位正在构建租赁数据平台的创始人,或者是一位只是想将房源信息收集到 Excel 中进行分析的开发人员,那么这些障碍可能会成为交易的致命因素。

但如果有一种更简洁的方法,可以提取准确、结构化的房产数据,避免以往的种种麻烦,并且受到超过 70,000 万个开发团队的信赖,那该多好?听起来像童话故事,对吧?其实不然。让我们来了解一下。 Crawlbase,这是你进行人工智能驱动的网络爬虫所需的唯一工具。

这里有一个关于如何使用自动化工具进行房地产交易的简短教程。 Crawlbase:

一步一步教你如何构建房地产数据爬虫

本指南展示了如何从两个房地产网站抓取房源信息—— 庄园 以及 再/最大 通过使用 Crawlbase Crawling API我们将提取价格、床位数、浴室位数、面积和地址等数据,然后将其导出到 Excel 表格中。

利用自动化技术进行房地产交易 Crawlbase

您无需管理代理、验证码或 JavaScript 渲染。 Crawlbase 它会帮你处理好这一切。所以,不用担心,让我们开始吧。

1。 先决条件

在开始之前,请确保您拥有:

  • 安装了Node.js
  • 你选择的集成开发环境/代码编辑器
  • A Crawlbase Crawling API 令牌 → 在这里 (1000 次免费请求)
  • 对 JavaScript/Node 有基本的了解(足以阅读函数即可)。

2. 安装所需的包

打开终端并运行:

1
2
npm初始化-y
npm 安装 Cheerio exceljs 爬行库

这些软件包处理:

  • Cheerio:用于从 HTML 中提取内容,例如 jQuery
  • ExcelJS:将列表写入 Excel 文件
  • Crawlbase绕过验证码、屏蔽和限制

3. 创建脚本文件并导入所需模块

首先,创建两个新文件,分别用于两个不同的脚本,文件名分别为: estately.js 以及 remax.js这就是您的项目结构:

利用自动化技术进行房地产交易 Crawlbase

然后,将以下代码粘贴到顶部,导入所需的库:

1
2
3
常量 欢呼= 要求('cheerio');
常量 ExcelJS = 要求('exceljs');
常量 { 抓取API } = 要求('crawlbase');

这两个脚本都需要这些代码行,所以不要忘记添加它们。

现在,让我们来看看有哪些不同之处。

由于我们有两个不同的脚本分别用于两个不同的房地产网站列表,所以我们将这样做:

  1. 首先,我们将分享每个脚本的完整功能代码。
  2. 其次,你要整体查看代码并进行尝试。
  3. 最后,我们将逐步讲解 Estately 脚本。由于两个脚本的结构相似,理解其中一个将使另一个变得轻而易举。

1. 如何抓取 Estately 的数据

它能做什么:

  • 浏览 Estately 网站上 Cape Coral 的房源信息
  • 提取价格、床位、浴室数量、面积(平方英尺)和地址
  • 将所有数据保存到 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
// 别忘了添加上面的共享逻辑
(异步 () => {
尝试 {
常量 接口= 抓取API({ 象征: “你的代币” });
常量 网址= 'https://www.estately.com/FL/Cape_Coral';
常量 响应 = 等待 蜜蜂。得到(网址);
常量 html = 响应?身体;
常量 $ = 快乐。加载(html);

常量 属性 = [];

$('div.result-item-details').((我,cardEl) => {
常量 card = $(cardEl);

常量 价格=卡。发现('p.result-price 强劲').文本()。修剪();
常量 价格价值 = 解析浮点数(价格。更换(/[^0-9.]/g, ''));

常量 床 = 卡片。发现('ul.result-basics-grid li').eq(0).发现('乙').文本()。修剪();
常量 洗澡 = 卡片。发现('ul.result-basics-grid li').eq(1).发现('乙').文本()。修剪();
常量 平方英尺 = 卡片。发现('ul.result-basics-grid li').eq(2).发现('乙').文本()。修剪();

常量 addressFull = 卡。发现('a.margin-0.small.limit-line-length').文本()。修剪();

if (价格) {
属性。({
价钱,
价格价值,
床,
浴缸,
平方英尺
address1: addressFull,
});
}
});

// 按价格排序
属性。分类((a,b) => a.价格价值 - b.价格价值);

// 写入 Excel
常量 工作簿 = ExcelJS.工作簿();
常量 工作表 = 工作簿。添加工作表('特性');

片。 = [
{ : '价格', : '价格', 宽度: 15 },
{ : , : ‘床’, 宽度: 10 },
{ : “浴场”, : ‘浴室’, 宽度: 10 },
{ : 平方英尺, : 平方英尺, 宽度: 12 },
{ : '地址', : 'address1', 宽度: 30 },
];

属性。每次((p) => 片。添加行(p));

常量 时间戳 = 日期()。转换为 ISOString()。更换(/[:.]/g, '-');
常量 文件路径 = `estately_property_data_${timestamp}.xlsx;

等待 工作簿。XLSX.写文件(文件路径);

领事.日志(✅ 已抓取并保存 ${properties.length} 属性 ${filePath}`);
} 捕捉 (错误) {
领事.错误(`❌ 抓取失败: ${错误消息}`);
}
})();

现在,打开终端,运行 node estately.js然后看看结果:

利用自动化技术进行房地产交易 Crawlbase

结果:

利用自动化技术进行房地产交易 Crawlbase

2. 如何抓取 Remax 数据

它能做什么:

  • 洛杉矶 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
// 别忘了在上面添加共享逻辑
(异步 () => {
尝试 {
常量 接口= 抓取API({ 象征: “你的代币” });
常量 网址= 'https://www.remax.com/homes-for-rent/ca/los-angeles/city/0644000';
常量 响应 = 等待 蜜蜂。得到(网址);
常量 html = 响应?身体;
常量 $ = 快乐。加载(html);

常量 属性 = [];

$('li[data-testid="d-li"]').(() => {
常量 卡片 = $(el);

常量 地址 = 卡片。发现('ad-listing-card-address h3').文本()。修剪();
常量 价格=卡。发现('span.d-listing-card-price-container h4').文本()。修剪();
常量 价格价值 = 解析浮点数(价格。更换(/[^0-9.]/g, ''));

常量 床 = 卡片。发现('p:contains("Beds") strong').第一()。文本()。修剪();
常量 洗澡 = 卡片。发现('p:contains("Baths") strong').第一()。文本()。修剪();
常量 平方英尺 = 卡片。发现('p:contains("Sq Ft") strong').第一()。文本()。修剪();

if (价格和地址){
属性。({价格,价格值,床数,浴室数,平方英尺,地址})
}
});

属性。分类((a,b) => a.价格价值 - b.价格价值);

常量 工作簿 = ExcelJS.工作簿();
常量 工作表 = 工作簿。添加工作表('特性');

片。 = [
{ : '价格', : '价格', 宽度: 15 },
{ : , : ‘床’, 宽度: 10 },
{ : “浴场”, : ‘浴室’, 宽度: 10 },
{ : 平方英尺, : 平方英尺, 宽度: 12 },
{ : '地址', : '地址', 宽度: 40 },
];

属性。每次((p) => 片。添加行(p));

常量 时间戳 = 日期()。转换为 ISOString()。更换(/[:.]/g, '-');
常量 文件路径 = `remax_property_data_${timestamp}.xlsx;

等待 工作簿。XLSX.写文件(文件路径);
领事.日志(✅ 已抓取并保存 ${properties.length} 属性 ${filePath}`);
} 捕捉 (错误) {
领事.错误(`❌ 错误: ${错误消息}`);
}
})();

现在,打开终端,运行 node remax.js然后看看结果:

利用自动化技术进行房地产交易 Crawlbase

结果:

利用自动化技术进行房地产交易 Crawlbase

庄园脚本分步讲解

1. 导入所需库

  • Cheerio:解析并提取 HTML 中的数据(类似 jQuery)。
  • exceljs:帮助创建和保存 Excel 文件。
  • CrawlingAPI:来自 Crawlbase 获取/渲染页面(尤其是动态页面)。
1
2
3
常量 欢呼= 要求('cheerio');
常量 ExcelJS = 要求('exceljs');
常量 { 抓取API } = 要求('crawlbase');

2. 启动异步 IIFE

  • 立即调用函数表达式 (IIFE) 用于立即运行异步代码。
  • try以及 catch 处理所有运行时错误。
1
2
3
4
5
6
7
(异步 () => {
尝试 {
// ...
} 捕捉 (错误) {
// ...
}
})();

3.设置 Crawlbase API 和网页抓取

  • 初始化 CrawlingAPI 使用您的 API 令牌。
  • 目标是 Estately 网站上位于佛罗里达州科勒尔角的房源。
  • response.body 包含页面的HTML内容。
1
2
3
4
常量 接口=  抓取API({ 象征: “你的代币” });
常量 网址= 'https://www.estately.com/FL/Cape_Coral';
常量 响应 = 等待 蜜蜂。得到(网址);
常量 html = 响应?身体;

4. 使用 Cheerios 加载 HTML

  • 将 HTML 加载到 Cheerio 中以进行 DOM 遍历:
1
常量 $ = 快乐。加载(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
常量 属性 = [];

$('div.result-item-details').((我,cardEl) => {
常量 card = $(cardEl);

常量 价格=卡。发现('p.result-price 强劲').文本()。修剪();
常量 价格价值 = 解析浮点数(价格。更换(/[^0-9.]/g, ''));

常量 床 = 卡片。发现('ul.result-basics-grid li').eq(0).发现('乙').文本()。修剪();
常量 洗澡 = 卡片。发现('ul.result-basics-grid li').eq(1).发现('乙').文本()。修剪();
常量 平方英尺 = 卡片。发现('ul.result-basics-grid li').eq(2).发现('乙').文本()。修剪();

常量 addressFull = 卡。发现('a.margin-0.small.limit-line-length').文本()。修剪();

if (价格) {
属性。({
价钱,
价格价值,
床,
浴缸,
平方英尺
address1: addressFull,
});
}
});

6. 按价格升序排列房产

  • 确保价格较低的房产优先显示。
1
属性。分类((a,b) => a.价格价值 - b.价格价值);

7. 创建 Excel 文件并添加数据

  • 初始化一个新的Excel工作簿和工作表:
1
属性。分类((a,b) => a.价格价值 - b.价格价值);
  • 定义Excel文件的列标题和列宽:
1
2
3
4
5
6
7
片。 = [
{ : '价格', : '价格', 宽度: 15 },
{ : , : ‘床’, 宽度: 10 },
{ : “浴场”, : ‘浴室’, 宽度: 10 },
{ : 平方英尺, : 平方英尺, 宽度: 12 },
{ : '地址', : 'address1', 宽度: 30 },
];
  • 将每个属性对象添加为新行:
1
属性。每次((p) => 片。添加行(p));

8. 保存带有时间戳的文件

  • 格式化当前时间戳。
  • 以唯一名称保存文件。
1
2
3
4
常量 时间戳 =  日期()。转换为 ISOString()。更换(/[:.]/g, '-');
常量 文件路径 = `estately_property_data_${timestamp}.xlsx;

等待 工作簿。XLSX.写文件(文件路径);

9. 成功与错误日志记录

  • 成功信息:
1
领事.日志(✅ 已抓取并保存 ${properties.length} 属性 ${filePath}`);
  • 如果抓取失败,则记录任何错误:
1
2
3
捕捉 (错误) {
领事.错误(`❌ 抓取失败: ${错误消息}`);
}

总结

抓取房地产数据不必那么痛苦。通过结合以下方法: Crawlbase + Cheerio + ExcelJS,您将获得一个简单、可扩展且运行良好的流程。

与其疲于应对验证码和封禁,不如能够构建你想要的东西:以价值为导向的工具、智能仪表板,甚至是简单的报告。

如果您正在寻找一种从复杂、受保护的网站中可靠地提取数据的方法, Crawlbase 是你唯一需要的网络爬虫工具。