红鳍网 是一个房地产网站,其中包含有关美国和加拿大各地房屋、公寓和房产的宝贵信息。每个月都有数百万人访问 Redfin 来浏览房源、查看社区并梦想他们的下一步行动。 Redfin 拥有数以百万计的挂牌房产和多年的数据,在房地产行业中占有重要地位。

2024 年 Redfin 统计数据

但是像我们这样的普通人如何获得这些数据呢?好吧,这就是网络抓取的用武之地。

在本指南中,我们将向您展示如何深入研究 Redfin 并提取有关属性的各种有用信息。

目录

  1. 为什么要抓取 Redfin 房产数据?
  2. 我们可以从 Redfin 中抓取什么?
  3. Redfin 抓​​取的环境设置
  4. 如何抓取 Redfin 属性页
  • 刮掉 Redfin 出租物业页面
  • 抓取 Redfin 销售属性页面
  1. 如何抓取 Redfin 搜索页面
  2. 跟踪 Redfin 列表更改源
  • 利用站点地图提要来发布新的和更新的列表
  • 在 Python 中实现 Redfin Feed Scraper
  1. 使用 Crawlbase 绕过 Redfin 阻止
  • Redfin防刮措施概述
  • 使用Crawlbase Crawling API进行平滑抓取
  1. 最后的思考
  2. 常见问题解答(FAQ)

为什么要抓取 Redfin 房产数据?

抓取 Redfin 房地产数据可以获取房地产领域的宝贵见解和机会。它使用户能够提取有关房产清单、价格和市场趋势的信息,从而实现明智的决策和竞争优势。

为什么要抓取 Redfin 属性数据

无论您是投资者、房主还是研究人员,抓取 Redfin 都可以直接访问相关数据,从而促进分析和战略规划。

我们可以从 Redfin 中获取什么?

当谈到抓取 Redfin 时,可能性是巨大且多种多样的。我们可以从 Redfin 上抓取各种房地产领域和目标。您可以使用 Redfin 刮刀探索一切内容,从搜索房产到查找待售或出租房屋的详细列表。

无论您是有兴趣探索待售房产、寻找租赁还是寻找投资机会,Redfin 都可以提供有关房产列表、价格和市场趋势的全面信息。此外,您还可以深入了解有关待售土地、即将举行的开放日活动的信息,甚至可以找到有关特定区域房地产经纪人的详细信息。

虽然我们在本指南中的重点是抓取房地产租金、销售和搜索页面,但值得注意的是,我们将介绍的技术和策略可以轻松调整以从 Redfin 平台上的其他页面提取数据。

让我们为每个人创建一个自定义 Redfin 刮刀。

Redfin 抓​​取的环境设置

设置自定义 Redfin 抓​​取工具的第一件事是确保安装了所有必需的库,所以让我们继续吧。

Python设置:首先确认您的系统上是否安装了Python。打开终端或命令提示符并输入以下命令来检查 Python 版本:

1
python --version

如果未安装Python,请从以下位置下载最新版本 Python官方网站 并按照提供的安装说明进行操作。

创造环境:为了管理项目依赖关系并确保一致性,建议创建虚拟环境。导航到终端中的项目目录并执行以下命令以创建名为的虚拟环境 redfin_env:

1
python -m venv redfin_env

根据您的操作系统运行适当的命令来激活虚拟环境:

  • 在Windows上:

    1
    redfin_env\Scripts\activate
  • 在 macOS/Linux 上:

    1
    资源 redfin_env/bin/激活

安装库:激活虚拟环境后,安装网页抓取所需的 Python 库。执行以下命令安装 requests 和 beautifulsoup4 库:

1
pip install 请求 pip install beautifulsoup4

选择IDE:选择合适的集成开发环境(IDE)对于高效编码至关重要。考虑流行的选项,例如 PyCharm, Visual Studio代码Jupyter笔记本。安装您首选的 IDE 并确保其配置为与 Python 一起使用。

一旦您的环境准备就绪,您就可以使用 Python 来抓取 Redfin 的大量房地产数据。

如何抓取 Redfin 属性页

在抓取 Redfin 属性页面时,需要关注两种主要类型:租赁属性页面和销售属性页面。让我们逐一分解:

刮掉 Redfin 出租物业页面

从 Redfin 抓​​取租赁房产页面需要利用该网站使用的私有 API。要启动此过程,请按照下列步骤操作:

  1. 识别出租物业页面:导航至 Redfin 上任何可供出租的房产页面。例如这个。
  2. 访问浏览器开发人员工具:按 F12 键打开浏览器的开发人员工具并导航到“网络”选项卡。
  3. 过滤请求:通过选择 Fetch/XHR 请求来过滤请求。
  4. 重新加载页面:刷新页面,观察浏览器向服务器发送的请求。
Redfin 租赁 API

在这些请求中,重点关注识别 FloorPlans 请求,其中包含相关的属性数据。此请求通常发送到特定的 API URL,例如:

1
https://www.redfin.com/stingray/api/v1/rentals/rental_id/floorPlans

rental_id API URL 中的内容表示租赁房产的唯一标识符。为了以编程方式提取这些数据,Python 可以与 requests 和 BeautifulSoup 等库一起使用。下面是一个简化的示例,演示了如何使用 Python 抓取租赁房产页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
进口 要求
bs4 进口 美丽汤
进口 JSON

DEF scrap_rental_property(网址):
标题={
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:100.0)Gecko/20100101 Firefox/100.0”,
“接受”: “文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,图像/webp,*/*;q=0.8”,
“接受编码”: “gzip、放气、br”,
“接受语言”: “en-US,en;q=0.5”,
}
响应 = requests.get(url, headers=headers)
汤 = BeautifulSoup(response.content, 'html.parser')
Rental_id = soup.find('元',{'财产': 'og:图像'})。得到('内容')。分裂(“租/”)[1]。分裂(“/”)[0]
api_url = f“https://www.redfin.com/stingray/api/v1/rentals/{租赁_id}/平面图”
响应 = requests.get(api_url, headers=headers)
property_data = json.loads(响应.内容)
回报 属性数据

# 用法示例
if __名字__ == “__主要的__”:
租赁网址= 'https://www.redfin.com/CA/Northridge/Northridge-Gardens/apartment/5825356'
Rental_data = scrape_rental_property(rental_url)
打印(json.dumps(rental_data, 缩进=2))

在这个例子中, scrape_rental_property 函数从属性页的 HTML 中提取租赁 ID 并构造相应的 API URL。随后,它向 API URL 发送请求以检索 JSON 格式的属性数据。

示例输出:

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
{
“出租ID”: "10a1d071-f8ff-49ac-a2c4-73466f80f4bb",
“单位类型按卧室”: [
{
“卧室标题”: “全部”,
“可用单位类型”: [
{
“单位类型 ID”: "6952e128-82c7-43f5-aaa4-cbbf6b26a97c",
“单位”: [
{
“单位ID”: "acd2d29e-47ea-4a31-9f3a-e3c15326831b",
“卧室”: 1,
「存款货币」: “美元”,
“全套浴室”: 1,
“半浴室”: 0,
“名称”: 《B层平面图》,
“租金货币”: “美元”,
「租金价格」: 2235,
“平方英尺”: 850,
“地位”: “可用的”
}
],
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用照片”: [
{
“开始位置”: 0,
“结束位置”: 0,
“版”: “1”
}
],
“可用单位”: 1,
“卧室”: 1,
“全套浴室”: 1,
“半浴室”: 0,
“名称”: 《B层平面图》,
“租金最高价”: 2235,
“租金最低”: 2235,
“最大平方英尺”: 850,
“平方英尺分钟”: 850,
“地位”: “可用的”,
“风格”: 《B层平面图》,
“总单位数”: 1
},
{
“单位类型 ID”: "669e8f0c-13e8-49d6-8ab1-42b7a75d0eb4",
“单位”: [
{
“单位ID”: "2bd05681-d2b3-460f-9ee7-df99fdc767b4",
“卧室”: 2,
「存款货币」: “美元”,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《平面图》,
“租金货币”: “美元”,
「租金价格」: 2675,
“平方英尺”: 1113,
“地位”: “可用的”
}
],
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用照片”: [
{
“开始位置”: 0,
“结束位置”: 0,
“版”: “1”
}
],
“可用单位”: 1,
“卧室”: 2,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《平面图》,
“租金最高价”: 2675,
“租金最低”: 2675,
“最大平方英尺”: 1113,
“平方英尺分钟”: 1113,
“地位”: “可用的”,
“风格”: 《平面图》,
“总单位数”: 1
},
{
“单位类型 ID”: "3e766c82-abf0-4373-bb6b-d621ebc3b288",
“单位”: [
{
“单位ID”: "b8a2d339-2d75-4a3f-8694-df2fe3cea836",
“卧室”: 3,
“日期可用”: "2024-05-14T00:00:00Z",
「存款货币」: “美元”,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《D层平面图》,
“租金货币”: “美元”,
「租金价格」: 3120,
“平方英尺”: 1408,
“地位”: “即将到来”
}
],
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用照片”: [
{
“开始位置”: 0,
“结束位置”: 0,
“版”: “1”
}
],
“可用单位”: 1,
“卧室”: 3,
“日期可用”: "2024-05-14T00:00:00Z",
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《D层平面图》,
“租金最高价”: 3120,
“租金最低”: 3120,
“最大平方英尺”: 1408,
“平方英尺分钟”: 1408,
“地位”: “即将到来”,
“风格”: 《D层平面图》,
“总单位数”: 1
}
],
“不可用的单位类型”: [
{
“单位类型 ID”: "bba4a8a5-02d8-4753-9373-79089ff735d5",
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用单位”: 0,
“卧室”: 2,
「存款货币」: “美元”,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《C层平面图》,
“租金最高价”: 2925,
“租金最低”: 2780,
“最大平方英尺”: 1152,
“平方英尺分钟”: 1152,
“地位”: “不可用”,
“风格”: 《C层平面图》,
“总单位数”: 0
}
]
},
{
“卧室标题”: 「1张床」,
“可用单位类型”: [
{
“单位类型 ID”: "6952e128-82c7-43f5-aaa4-cbbf6b26a97c",
“单位”: [
{
“单位ID”: "acd2d29e-47ea-4a31-9f3a-e3c15326831b",
“卧室”: 1,
「存款货币」: “美元”,
“全套浴室”: 1,
“半浴室”: 0,
“名称”: 《B层平面图》,
“租金货币”: “美元”,
「租金价格」: 2235,
“平方英尺”: 850,
“地位”: “可用的”
}
],
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用照片”: [
{
“开始位置”: 0,
“结束位置”: 0,
“版”: “1”
}
],
“可用单位”: 1,
“卧室”: 1,
“全套浴室”: 1,
“半浴室”: 0,
“名称”: 《B层平面图》,
“租金最高价”: 2235,
“租金最低”: 2235,
“最大平方英尺”: 850,
“平方英尺分钟”: 850,
“地位”: “可用的”,
“风格”: 《B层平面图》,
“总单位数”: 1
}
]
},
{
“卧室标题”: 「2张床」,
“可用单位类型”: [
{
“单位类型 ID”: "669e8f0c-13e8-49d6-8ab1-42b7a75d0eb4",
“单位”: [
{
“单位ID”: "2bd05681-d2b3-460f-9ee7-df99fdc767b4",
“卧室”: 2,
「存款货币」: “美元”,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《平面图》,
“租金货币”: “美元”,
「租金价格」: 2675,
“平方英尺”: 1113,
“地位”: “可用的”
}
],
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用照片”: [
{
“开始位置”: 0,
“结束位置”: 0,
“版”: “1”
}
],
“可用单位”: 1,
“卧室”: 2,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《平面图》,
“租金最高价”: 2675,
“租金最低”: 2675,
“最大平方英尺”: 1113,
“平方英尺分钟”: 1113,
“地位”: “可用的”,
“风格”: 《平面图》,
“总单位数”: 1
}
],
“不可用的单位类型”: [
{
“单位类型 ID”: "bba4a8a5-02d8-4753-9373-79089ff735d5",
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用单位”: 0,
“卧室”: 2,
「存款货币」: “美元”,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《C层平面图》,
“租金最高价”: 2925,
“租金最低”: 2780,
“最大平方英尺”: 1152,
“平方英尺分钟”: 1152,
“地位”: “不可用”,
“风格”: 《C层平面图》,
“总单位数”: 0
}
]
},
{
“卧室标题”: 「3张床」,
“可用单位类型”: [
{
“单位类型 ID”: "3e766c82-abf0-4373-bb6b-d621ebc3b288",
“单位”: [
{
“单位ID”: "b8a2d339-2d75-4a3f-8694-df2fe3cea836",
“卧室”: 3,
“日期可用”: "2024-05-14T00:00:00Z",
「存款货币」: “美元”,
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《D层平面图》,
“租金货币”: “美元”,
「租金价格」: 3120,
“平方英尺”: 1408,
“地位”: “即将到来”
}
],
“可用租赁条款”: [
“多变的”,
“6个月”,
“12个月”
],
“可用照片”: [
{
“开始位置”: 0,
“结束位置”: 0,
“版”: “1”
}
],
“可用单位”: 1,
“卧室”: 3,
“日期可用”: "2024-05-14T00:00:00Z",
“全套浴室”: 2,
“半浴室”: 0,
“名称”: 《D层平面图》,
“租金最高价”: 3120,
“租金最低”: 3120,
“最大平方英尺”: 1408,
“平方英尺分钟”: 1408,
“地位”: “即将到来”,
“风格”: 《D层平面图》,
“总单位数”: 1
}
]
}
],
“总单位类型”: 4,
“总单位数”: 3
}

抓取 Redfin 销售属性页面

使用 redfin scraper 抓取销售属性页面涉及使用 XPath 和 CSS 选择器,因为没有专用的 API 来获取数据。下面是一个简化的示例,演示了如何使用 Python 以及 requests 和 BeautifulSoup 库来抓取 redfin 销售属性页面:

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
进口 要求
bs4 进口 美丽汤
进口 JSON

DEF 待售解析属性(html_内容):
"""从 HTML 解析属性数据"""
汤 = BeautifulSoup(html_content, 'html.parser')
价格=汤.select_one('div[data-rf-test-id="abp-price"] div').text.strip()
估计每月价格 = ''.join([标签.文本 行李牌 in 汤.选择('.est-每月付款')])
地址 = soup.select_one('。街道地址').text.strip() + '' + 汤.select_one('.bp-cityStateZip').text.strip()
描述 = soup.select_one('#marketing-remarks-scroll p').text.strip()
图像 = [img['源代码'] IMG in 汤.选择('img.widenPhoto')]
详细信息 = [detail.text.strip() 细节 in 汤.选择('div .keyDetails-value')]
特征数据 = {}
特征块 in 汤.选择('.amenity-group ul div.title'):
标签 = feature_block.text.strip()
特征 = [feat.text.strip() 功绩 in feature_block.find_next_siblings(‘礼’)]
features_data[标签] = 特征
回报 {
“地址”: 地址,
“说明”: 描述,
“价钱”: 价格,
“预计每月价格”:估计每月价格,
“附件”: 图片,
“细节”: 细节,
“特征”:特征数据,
}

DEF scrape_待售房产(网址):
标题={
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:100.0)Gecko/20100101 Firefox/100.0”,
“接受”: “文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,图像/webp,*/*;q=0.8”,
“接受编码”: “gzip、放气、br”,
“接受语言”: “en-US,en;q=0.5”,
}
属性=[]
网址 in 网址:
响应 = requests.get(url, headers=headers)
if 响应.status_code == 200:
属性.append(parse_property_for_sale(response.content))
打印(f"刮掉 {LEN(特性)} 待售房产列表”)
回报

# 用法示例
if __名字__ == “__主要的__”:
销售网址 = ['https://www.redfin.com/CA/North-Hollywood/6225-Coldwater-Canyon-Ave-91606/unit-106/home/5104172', 'https://www.redfin.com/CA/Woodland-Hills/5530-Owensmouth-Ave-91367/unit-321/home/8180371']
sale_data = scrape_property_for_sale(sale_urls)
打印(json.dumps(sale_data, 缩进=2))

在这个例子中, parse_property_for_sale 函数使用 BeautifulSoup 从销售属性页的 HTML 内容中提取属性数据,并将其作为 JSON 对象返回。然后, scrape_property_for_sale 函数迭代属性页 URL 列表,使用请求检索其 HTML 内容,并使用 parse_property_for_sale 功能。

示例输出:

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
刮伤 2 待售物业清单
[
{
“地址”: “6225 Coldwater Canyon Ave #106,格伦谷,CA 91606”,
“说明”: “欢迎来到萨顿露台 (Sutton Terrace),这是位于格伦/诺霍谷 (Valley Glen/Noho) 的一个封闭式社区。一楼有一套漂亮的两卧室、两浴室公寓,拥有该建筑群中最大的露台之一。该单元几乎完全重做,包括新的干墙、新油漆、全新楼层、嵌入式照明、全新浴室。开放式平面图给这间 1209 平方英尺的公寓带来宽敞的感觉。您可以在厨房厨房享受烹饪的乐趣,全新的双层滑动玻璃门通向露台,享用早晨咖啡每个房间均铺有全新的防水强化木地板。厨房和浴室铺有全新的瓷砖地板。宽敞的主卧室设有超大步入式衣柜。主浴室配有大型步入式淋浴间、漂亮的双人床配有白色卡拉拉大理石柜台和软关闭橱柜抽屉的水槽梳妆台。大楼后面有两个独立的车库停车位。这座中型综合体拥有 54 个单元,设有一个波光粼粼的游泳池、一个配有台球桌的小型俱乐部会所。靠近主要高速公路、餐厅和商店。这是一个可以称之为家的地方。准备搬进来了!”,
“价钱”: “ $ 627,000”,
“预计每月价格”: “预计 4,768 美元/月”,
“附件”: [],
“细节”: [
“Redfin 2 小时”,
“公寓”,
“建于1965年”,
“1.82英亩”,
“每平方英尺 519 美元”,
“2个车库位(共4个)”,
“有空调”,
“每月 484 美元的 HOA 费用”,
“2.25%买家代理费”,
“VG - 格伦谷”
],
“特征”: {
“停车/车库信息”: [
“车位数量:2”,
“车库空间数量:2”
],
「洗衣信息」: [
「有洗衣房」,
“社区”
],
《厨房信息》: [
“电器:洗碗机、燃气烤箱、煤气灶”,
“有家电”
],
「浴室信息」: [
“浴室数量 (3/4):2”,
“淋浴、主浴室双水槽、双淋浴喷头(或多个)、排气扇、石英柜台、步入式淋浴间”
],
“冷却信息”: [
“中央”,
“有冷却”
],
「房间信息」: [
“所有卧室朝下,厨房,客厅,主浴室,主卧室,步入式衣柜”
],
《壁炉信息》: [
“客厅,木头”,
「有壁炉」
],
《地板信息》: [
“层压板、瓷砖”
],
《供暖信息》: [
《中央熔炉》,
“有暖气”
],
「内部特色」: [
“滑动玻璃门”,
“入门级别:1”
],
「外观信息」: [
“结构类型:多户”,
《屋顶:构图》
],
「外观特征」: [
“庭院和门廊特点:庭院开放”,
「有露台」
],
「批次信息」: [
“高程单位:英尺”,
“批量来源:评估员数据”
],
「房产信息」: [
“共同利益:公寓”,
“单元总数:54”
],
《评估信息》: [
“评估:未知”
],
“公用事业信息”: [
“电动:标准”,
“下水道:公共下水道”
],
《多单位信息》: [
“社区单位数量:54”
],
“业主协会”: [
“是协会的一部分”,
“协会名称:萨顿露台”
],
「周边信息」: [
《社区特色:人行道、街道照明》
],
「学校信息」: [
《高中学区:洛杉矶联合》
],
“地点信息”: [
“纬度:34.18385500”,
“经度:-118.41443200”
],
「上市信息」: [
“买家代理赔偿:2.250”,
“买方代理补偿类型:%”
],
《上市代理信息》: [
“名单特工名字:丹”,
“列出特工姓氏:图尔西”
],
《上市公司信息》: [
“列出办公室名称:Redfin Corporation”
]
}
},
{
“地址”: “5530 欧文斯茅斯大道 #321,伍德兰希尔斯,CA 91367”,
“说明”: “欢迎来到您在奢华生活中心的梦想之家!这套精心维护的公寓坐落在一个有 24 小时保安的门禁社区中,提供舒适和便利的缩影。进入这间宽敞的住宅,设有 2 间卧室、2 间浴室和多功能阁楼空间由于其高高的天花板和开放式平面图,全部沐浴在自然光中。美食厨房配有石英台面、不锈钢器具和食品储藏室,是厨师的最爱,非常适合烹饪冒险和招待客人。宁静的套房主浴室配有双水槽、百叶窗和步入式衣柜,提供充足的存储空间。享受单元内洗衣机和烘干机的便利,以及 2 个带顶棚的停车位和充足的访客停车位. 尽情享受豪华设施,包括 3 个游泳池、热水浴缸、健身中心、网球场、壁球场以及桑拿浴室。经过一天的放松或娱乐后,您可以在舒适的客厅或客用浴室的燃气壁炉旁放松身心按摩浴缸。这套经过改建的公寓位于顶层,完美融合了优雅和功能。中央空调和暖气确保全年舒适,而郁郁葱葱的场地为日常生活提供宁静的背景。靠近托潘加村 (Topanga Village)、文图拉大道 (Ventura Blvd),体验终极城市生活。餐厅、Whole Foods、Trader Joes 以及一系列商店和娱乐场所。不要错过这个机会,将这套精致的公寓称为您自己的!”,
“价钱”: “ $ 599,000”,
“预计每月价格”: “预计 4,656 美元/月”,
“附件”: [],
“细节”: [
“Redfin 上 3 天”,
“公寓”,
“1987年建成,1995年翻新”,
“1.62英亩”,
“每平方英尺 530 美元”,
「2个停车位」,
“有空调”,
“单位内洗衣房(洗衣机和烘干机)”,
“每月 563 美元的 HOA 费用”,
“2.5%买家代理费”,
《伍德兰山》
],
“特征”: {
“车库”: [
“为客人分配、串联、停车”
],
“停车处”: [
“有盖停车位数量:2”
],
“虚拟旅游”: [
“虚拟游览(外部链接)”
],
「浴室信息」: [
“浴室数量(已满):2”,
“带喷头的浴缸、浴缸上的淋浴、淋浴间、双梳妆台”
],
《厨房信息》: [
“燃气/电炉,燃气”
],
「洗衣信息」: [
“单位内洗衣,内部洗衣”
],
「额外的房间」: [
“饭厅”,
“书房”
],
「内部特色」: [
“内置,交钥匙”
],
《壁炉信息》: [
“燃气壁炉,在客厅”
],
《地板信息》: [
《铺着地毯的地板》
],
“设备”: [
“内置、垃圾处理、电梯、烘干机、洗碗机、吊扇、洗衣机、冰箱、炉灶/烤箱”
],
“加热和冷却”: [
“中央冷却”,
《集中供暖》
],
「建筑物信息」: [
“多层次”,
“附属,公寓”
],
「矿池信息」: [
“协会池、社区池”,
“协会水疗中心、社区水疗中心、加热水疗中心”
],
「房产信息」: [
“房产类型:住宅公寓/合作公寓”,
“房产状况:更新/改造”
],
「批次信息」: [
“地块面积(平方英尺):70,398”,
“地块面积(英亩):1.6161”
],
《评估信息》: [
“评估员包裹编号:2146-036-181”
],
“财务信息”: [
“销售办公室补偿类型:%”,
“售楼处报酬:2.5”
],
《HOA信息》: [
“设施:电梯、健身中心、门禁社区、门禁社区警卫、游泳池、壁球、桑拿、保安、宾客停车场、水疗中心、日光浴平台、网球场、受控访问”,
“费用#1:563 美元”
],
「社区资讯」: [
“综合体的单位数量(总计):1,279”
],
“地点信息”: [
“大楼单元楼层:3”,
“综合体名称:大都会华纳中心”
],
“文件和披露”: [
“披露:无”
],
「上市信息」: [
“售楼处报酬:2.5”,
“销售办公室补偿类型:%”
]
}
}
]

如何抓取 Redfin 搜索页面

当您想要从 Redfin 的搜索页面中抓取数据时,您可以通过利用其私有搜索 API 来实现,该 API 以 JSON 格式提供您所需的信息。您可以通过以下方式找到并访问此 API:

  1. 转至 redfin.com 上的任何搜索页面。
  2. 按 F12 键打开浏览器开发人员工具并查看页面的 HTML。
  3. 搜索位置(例如洛杉矶)。
  4. 在网络选项卡中搜索符合您期望的 API。
Redfin 搜索 API

通过执行这些步骤,您将发现负责获取与指定搜索区域相关的数据的 API 请求。要找到此 API,请转到网络选项卡并通过 Fetch/XHR 过滤请求。

要实际抓取 Redfin 搜索结果,您需要从记录的请求中获取 API URL,并使用它以 JSON 格式检索所有搜索数据。这里有一个简单的 Python 脚本可以帮助您做到这一点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
进口 要求
进口 JSON
键入 进口 清单, 字典

DEF 抓取搜索(网址: STR)-> 清单[字典]:
标题={
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:100.0)Gecko/20100101 Firefox/100.0”,
“接受”: “文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,图像/webp,*/*;q=0.8”,
“接受编码”: “gzip、放气、br”,
“接受语言”: “en-US,en;q=0.5”,
}
响应 = requests.get(url, headers=headers)
if 响应.status_code == 200:
search_data = json.loads(响应.内容)
回报 搜索数据
其他:
打印(“检索搜索数据失败。”)
回报 []

# 用法示例
if __名字__ == “__主要的__”:
搜索网址 = "https://www.redfin.com/stingray/api/v1/search/rentals?al=1&isRentals=true&market=socal&num_homes=350&ord=redfin-recommended-asc&page_number=1&poly=-119.80596%2033.83247%2C-116.9248%2033.83247%2C-116.9248%2034.67922%2C-119.80596%2034.67922%2C-119.80596%2033.83247&region_id=11203&region_type=6&sf=1,2,3,5,6,7&start=0&status=9&uipt=1,2,3,4&use_max_pins=true&v=8&zoomLevel=9"
搜索数据 = scrape_search(搜索网址)
打印(json.dumps(搜索数据,缩进=2))

在此脚本中,scrape_search 函数向搜索 API URL 发送请求,然后从 API 响应中提取相关 JSON 数据。执行此代码为我们提供了从搜索结果的所有分页页面检索到的属性数据。

点击 此处 查看示例输出。

跟踪 Redfin 列表更改源

无论您是购买、出售还是只是对房地产感兴趣,了解 Redfin 列表的最新动态对于多种目的都是至关重要的。以下是了解这些更新的简单方法:

利用站点地图提要来发布新的和更新的列表

Redfin 提供站点地图提要,提供有关新列表和现有列表更新的信息。这些提要,即 newestlatest对于任何想要了解动态房地产市场的人来说,都是宝贵的资源。以下是每个提要发出的信号:

  • 最新:发布新列表时发出信号。
  • 最近的:列表更新或更改时发出信号。

通过抓取这些站点地图,您可以检索列表的 URL 以及指示列表或更新时间的时间戳。以下是您可能在这些站点地图中找到的内容片段:

1
2
3
4
5
6
<网址>
<>https://www.redfin.com/CO/Denver/Undisclosed-address-80249/home/45360770</>
<Lastmod>2024-04-08T17:34:57.879-07:00</Lastmod>
<更改频率>每天</更改频率>
<优先>1.0</优先>
</网址>

备注:这些站点地图中使用的时区是 UTC-8,如日期时间字符串中的最后一个数字所示。

在 Python 中实现 Redfin Feed Scraper

要抓取这些 Redfin 源并检索最近属性列表的 URL 和时间戳,您可以使用 Python 以及 requests 库。这里有一个 Python 脚本可以帮助您实现这一目标:

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
进口 要求
进口 xml.etree.元素树 as ET
日期工具 进口 解析器
键入 进口 字典

DEF 抓取饲料(网址: STR)-> 字典[STR, STR]:
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:100.0)Gecko/20100101 Firefox/100.0”,
“接受”: “文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,图像/webp,*/*;q=0.8”,
“接受编码”: “gzip、放气、br”,
“接受语言”: “en-US,en;q=0.5”,
}

响应 = requests.get(url, headers=headers)
响应.raise_for_status()
xml_data = 响应.内容
结果= {}

根 = ET.fromstring(xml_data)
命名空间 = root.tag.split('}')[0][1:]
命名空间_字典 = {'ns': 命名空间} if 命名空间 其他 {}

网址标签 in root.findall('.//ns:url',命名空间_字典):
loc = url_tag.find('ns:loc',namespace_dict).text
最后修改 = url_tag.find('ns:lastmod',namespace_dict).text
# 使用 dateutil.parser 解析日期时间字符串
lastmod_datetime = parser.parse(lastmod)
结果[loc] = Lastmod_datetime

回报 结果

# 用法示例
if __名字__ == “__主要的__”:
提要网址 = “https://www.redfin.com/newest_listings.xml”
feed_data = scrape_feed(feed_url)
打印(提要数据)

运行此脚本将为您提供 Redfin 上最近添加的房产列表的 URL 和日期。获得此信息后,您可以进一步利用 Redfin 抓​​取工具从这些 URL 中提取属性数据集。

示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
'https://www.redfin.com/TX/Meadowlakes/222-Muirfield-St-78654/home/121619759': datetime.datetime(2024, 4, 9, 10, 32, 32, 645000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/FL/Jacksonville/2851-Casa-del-Rio-Ter-32257/home/58749953': datetime.datetime(2024, 4, 9, 10, 32, 27, 602000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/TX/La-Feria/203-Janet-Cir-N-78559/home/182636657': datetime.datetime(2024, 4, 9, 10, 32, 23, 520000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/TX/Waco/3825-Homan-Ave-76707/home/139230444': datetime.datetime(2024, 4, 9, 10, 32, 22, 121000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/IL/Chicago/4848-N-Sheridan-Rd-60640/unit-701/home/21825795': datetime.datetime(2024, 4, 9, 10, 32, 18, 876000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/TN/Nashville/2708-Batavia-St-37208/home/108001948': datetime.datetime(2024, 4, 9, 10, 32, 15, 248000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/MI/Burr-Oak/31490-Kelly-Rd-49030/home/136737473': datetime.datetime(2024, 4, 9, 10, 32, 15, 129000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/MI/Hudsonville/1273-Gleneagle-Pl-49426/unit-15/home/99475821': datetime.datetime(2024, 4, 9, 10, 32, 13, 509000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/RI/Providence/50-Ashton-St-02904/home/51709312': datetime.datetime(2024, 4, 9, 10, 32, 13, 490000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/FL/Cape-Coral/3821-SE-11th-Ave-33904/home/61977474': datetime.datetime(2024, 4, 9, 10, 32, 11, 90000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/FL/Fort-Myers/9180-Southmont-Cv-33908/unit-305/home/67952918': datetime.datetime(2024, 4, 9, 10, 32, 10, 566000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/NJ/New-Milford/391-Congress-St-07646/home/35797857': datetime.datetime(2024, 4, 9, 10, 32, 8, 814000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/CO/Carbondale/41-Crystal-Cir-81623/home/129580833': datetime.datetime(2024, 4, 9, 10, 32, 16, 772000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/CA/Sacramento/3180-Mountain-View-Ave-95821/home/19148583': datetime.datetime(2024, 4, 9, 10, 31, 51, 973000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/WA/Belfair/111-NE-Ridgetop-Xing-98528/unit-22/home/190428970': datetime.datetime(2024, 4, 9, 10, 31, 42, 885000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/WA/Port-Angeles/935-E-7th-St-98362/home/69010262': datetime.datetime(2024, 4, 9, 10, 31, 41, 236000, 兹信息 = 兹折扣设置(无,-25200)),
'https://www.redfin.com/WA/Redmond/7810-134th-Ave-NE-98052/home/515375': datetime.datetime(2024, 4, 9, 10, 31, 40, 531000, 兹信息 = 兹折扣设置(无,-25200)),
.... 更多的
}

使用 Crawlbase 绕过 Redfin 阻止

在高效抓取 Redfin 数据的过程中,遇到阻塞措施可能是一个障碍。但是,通过正确的方法,您可以轻松绕过验证码和阻止。让我们看看 Crawlbase 定制红鳍鱼刮刀如何帮助您。

Redfin防刮措施概述

Redfin 防刮措施

Redfin 采用各种反抓取措施来保护其数据不被自动化机器人收集。这些措施可能包括 IP 速率限制、验证码和用户代理检测。为了绕过这些障碍,必须采用模仿人类浏览行为的策略 轮换IP地址 有效。

使用 Crawlbase 爬行 API 实现平滑的 Redfin 抓​​取

Crawlbase 提供了一个全面的解决方案,可以在不触发阻止机制的情况下从 Redfin 抓​​取数据。通过利用 Crawlbase 的爬行 API,您可以访问住宅 IP 地址池,确保抓取操作顺利、不间断。此外,Crawlbase 还可以处理用户代理轮换和 验证码解决,进一步增强抓取过程。

Crawlbase提供了自己的Python 图书馆 以方便其客户。你只需要可以替换 requests 图书馆与 crawlbase 库发送请求。使用 pip install crawlbase 命令来安装它。使用时需要有访问令牌进行身份验证,可以在之后获取 创建一个帐户.

下面是使用 Crawlbase 库中的 Crawling API 发送请求的示例函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
 爬行基地 进口 抓取API

爬行 API = 爬行 API({ '令牌': 'YOUR_CRAWLBASE_TOKEN' })

DEF make_crawlbase_request(网址):
响应=crawling_api.get(url)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
回报 html_内容
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 不包含

备注:前 1000 个抓取 API 请求免费。无需信用卡。您可以阅读API文档 此处.

借助我们的 API,您可以放心地执行抓取任务,因为您知道您的请求与真实的用户交互没有区别。这种方法不仅提高了抓取效率,还最大限度地降低了被 Redfin 反抓取机制检测和阻止的风险。

最后的思考

从 Redfin 抓​​取数据可以成为用于多种目的的有价值的工具,例如市场分析、房地产估价和房地产监控。通过使用网络抓取技术和工具(例如 Redfin scraper),个人和公司可以收集有关房地产市场的有用信息。

然而,必须以道德和负责任的方式进行网络抓取,尊重被抓取网站的服务条款和隐私政策。此外,考虑到 IP 封锁和其他障碍的可能性,明智的做法是使用诸如 旋转代理 并更改用户代理字符串以保持隐藏。解决这些阻塞措施的一种解决方案是使用 Crawlbase 爬取 API.

如果您有兴趣了解如何从其他房地产网站抓取数据,请查看下面的有用指南。

📜 如何抓取 Realtor.com
📜 如何刮 Zillow
📜 如何抓取 Airbnb
📜 如何抓取 Booking.com
📜 如何抓取 Expedia

如果您有任何问题或反馈,我们的 支持团队 随时为您的网络抓取之旅提供帮助。快乐刮擦!

常见问题解答(FAQ)

问:我可以合法地从 Redfin 抓​​取数据吗?

是的,您可以从 Redfin 中获取数据,但必须以负责任且符合道德的方式进行操作。 Redfin 的服务条款禁止自动抓取,因此审查并遵守其政策至关重要。为避免任何法律问题,请考虑以下事项:

  • 尊重 Redfin 的 robots.txt 文件,该文件概述了网站中爬虫禁止访问的部分。
  • 仅抓取公开数据并避免访问任何私人或敏感信息。
  • 限制请求的频率以避免 Redfin 服务器过载。
  • 如果可能的话,在广泛抓取 Redfin 网站之前获得其明确许可。

问:如何防止我的抓取工作被 Redfin 阻止?

为了防止您的抓取工作被 Redfin 拦截,您可以采取以下几种防拦截措施:

  • 使用 轮换居住代理 以避免检测并防止 IP 封锁。
  • 使用用户代理字符串池来模仿人类浏览行为并避免被 Redfin 的反抓取机制检测到。
  • 实施速率限制来控制请求的频率并避免触发 Redfin 的自动检测系统。
  • 考虑使用像 Crawlbase Crawling API 这样的服务,它提供专门设计用于规避阻止措施并确保顺利抓取操作的工具和功能。

问:我可以使用哪些工具和库从 Redfin 中抓取数据?

您可以使用各种工具和库从 Redfin 中抓取数据,包括:

  • 蟒蛇:Requests 和 BeautifulSoup 等库提供了发送 HTTP 请求和解析 HTML 内容的强大功能。
  • Scrapy:一个网络爬行和抓取框架,可简化从网站提取数据的过程。
  • 爬虫库:一个全面的网络抓取平台,提供轮换代理、用户代理轮换和防封锁措施等功能,专门设计用于促进 Redfin 和其他网站顺利、高效地抓取。

问:Redfin 的网络抓取值得付出努力吗?

Redfin 的网络抓取对于希望收集房地产市场见解的个人和企业来说非常有价值。通过提取有关房产列表、价格、趋势等的数据,您可以获得投资决策、市场分析和竞争研究的宝贵信息。然而,必须以道德的方式进行抓取,尊重网站的服务条款并确保遵守法律和道德标准。此外,利用 Crawlbase Crawling API 等工具可以帮助简化抓取过程并减少潜在的障碍,例如 IP 阻止和反抓取措施。