你是否曾经尝试抓取房地产网站的数据,却遭遇验证码、速率限制、重定向或IP封禁等重重阻碍?这就像付出了所有努力,却在终点线前被困住了一样。
因此,如果您是一位正在构建租赁数据平台的创始人,或者是一位只是想将房源信息收集到 Excel 中进行分析的开发人员,那么这些障碍可能会成为交易的致命因素。
但如果有一种更简洁的方法,可以提取准确、结构化的房产数据,避免以往的种种麻烦,并且受到超过 70,000 万个开发团队的信赖,那该多好?听起来像童话故事,对吧?其实不然。让我们来了解一下。 Crawlbase,这是你进行人工智能驱动的网络爬虫所需的唯一工具。
这里有一个关于如何使用自动化工具进行房地产交易的简短教程。 Crawlbase:
一步一步教你如何构建房地产数据爬虫
本指南展示了如何从两个房地产网站抓取房源信息—— 庄园 以及 再/最大 通过使用 Crawlbase Crawling API我们将提取价格、床位数、浴室位数、面积和地址等数据,然后将其导出到 Excel 表格中。

您无需管理代理、验证码或 JavaScript 渲染。 Crawlbase 它会帮你处理好这一切。所以,不用担心,让我们开始吧。
开始使用 1,000 个免费请求
试试我们 Crawling API 自动化数据收集——超过 70 万个开发团队使用
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这就是您的项目结构:

然后,将以下代码粘贴到顶部,导入所需的库:
1 2 3
| 常量 欢呼= 要求('cheerio'); 常量 ExcelJS = 要求('exceljs'); 常量 { 抓取API } = 要求('crawlbase');
|
这两个脚本都需要这些代码行,所以不要忘记添加它们。
现在,让我们来看看有哪些不同之处。
由于我们有两个不同的脚本分别用于两个不同的房地产网站列表,所以我们将这样做:
- 首先,我们将分享每个脚本的完整功能代码。
- 其次,你要整体查看代码并进行尝试。
- 最后,我们将逐步讲解 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.价格价值);
常量 工作簿 = 新 ExcelJS.工作簿(); 常量 工作表 = 工作簿。添加工作表('特性');
片。列 = [ { 头: '价格', 键: '价格', 宽度: 15 }, { 头: 床, 键: ‘床’, 宽度: 10 }, { 头: “浴场”, 键: ‘浴室’, 宽度: 10 }, { 头: 平方英尺, 键: 平方英尺, 宽度: 12 }, { 头: '地址', 键: 'address1', 宽度: 30 }, ];
属性。每次((p) => 片。添加行(p));
常量 时间戳 = 新 日期()。转换为 ISOString()。更换(/[:.]/g, '-'); 常量 文件路径 = `estately_property_data_${timestamp}.xlsx;
等待 工作簿。XLSX.写文件(文件路径);
领事.日志(✅ 已抓取并保存 ${properties.length} 属性 ${filePath}`); } 捕捉 (错误) { 领事.错误(`❌ 抓取失败: ${错误消息}`); } })();
|
现在,打开终端,运行 node estately.js然后看看结果:

结果:

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然后看看结果:

结果:

庄园脚本分步讲解
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 遍历:
- 使用以下方式查找所有属性卡
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 文件并添加数据
1
| 属性。分类((a,b) => a.价格价值 - b.价格价值);
|
1 2 3 4 5 6 7
| 片。列 = [ { 头: '价格', 键: '价格', 宽度: 15 }, { 头: 床, 键: ‘床’, 宽度: 10 }, { 头: “浴场”, 键: ‘浴室’, 宽度: 10 }, { 头: 平方英尺, 键: 平方英尺, 宽度: 12 }, { 头: '地址', 键: 'address1', 宽度: 30 }, ];
|
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 是你唯一需要的网络爬虫工具。