Realtor.com 是一个受欢迎的房地产网站,帮助人们购买、出售和租赁房产。 Realtor.com 拥有庞大的房产列表数据库。它的重要性在于它吸引的大量搜索和流量。由于 Realtor.com 用户友好的界面和全面的列表,许多寻找房屋或房地产信息的人都使用 Realtor.com。

realtor.com 的列表数量

在本博客中,我们将探索使用 Python 抓取 Realtor.com 房地产数据的过程。我们将涵盖从了解网络抓取的基础知识到清理和组织提取的数据的所有内容。因此,让我们深入了解如何从 Realtor.com 中提取有价值的信息!

目录

  1. 为什么要抓取 Realtor.com?
  2. 项目设置
  • 安装 Python 和库
  • 选择 IDE
  1. 创建 Realtor.com 抓取工具
  • 分析 Realtor.com 房产页面
  • 使用 Python 从单个属性中提取数据
  1. 查找 Realtor.com 房产
  • 利用 Realtor.com 的搜索系统进行房产发现
  • 从特定位置抓取房产列表
  1. 观察 Realtor.com 列表变化
  • Realtor.com 用于跟踪房产变化的 RSS 源
  • 编写 RSS feeds scraper 来监控变化
  1. 抓取 Realtor.com 的挑战和障碍
  2. 使用 Crawlbase 扩展 Realtor.com 抓取规模
  • Crawlbase爬取API用于反抓取和绕过限制
  • 使用 Crawlbase 抓取 API 创建 Realtor.com Scraper
  1. 最后的思考
  2. 常见问题解答(FAQ)

1. 为什么要抓取 Realtor.com?

抓取 Realtor.com 提供 房地产信息,包括房产列表、售价、租金和房产特征。这些数据是了解市场趋势和发现投资机会的宝贵资源。

为什么要抓取 realtor.com

利用 Realtor.com 抓取的个人可以深入了解各种房地产详细信息,利用这些数据进行市场研究、投资分析和确定潜在的投资前景。

除了访问特定的房地产数据外,抓取 Realtor.com 还可以提供有关当地房地产市场动态的宝贵见解。对房产类型、位置偏好和便利设施的分析使房地产专业人士能够根据不断变化的买家和卖家的需求调整策略。

房地产专业人士可以利用历史数据并监控持续上市的房源,以了解市场动态、供需波动和定价趋势。

2. 项目设置

在我们深入抓取 Realtor.com 之前,让我们先设置我们的项目以确保我们拥有所需的一切。我们将通过使用来保持简单 要求, 美丽的汤4xml文件 用于抓取的库。

安装 Python 和库

Python安装:

  • 如果您没有安装Python,请访问 蟒蛇网 下载并安装最新版本。
  • 在安装过程中,请务必选中“将 Python 添加到 PATH”框,以便从命令行轻松运行 Python。

库安装:

  • 打开命令提示符或终端。

  • 键入以下命令来安装必要的库:

    1
    2
    3
    点安装请求
    点安装beautifulsoup4
    pip 安装 lxml
  • 这将安装用于处理 Web 请求的 requests、用于解析 HTML 的 beautifulsoup4 和用于解析 XML 的 lxml。

选择 IDE

现在我们已经安装了 Python 和所需的库,让我们选择一个集成开发环境 (IDE) 来使我们的编码体验更加流畅。 IDE 是一种软件应用程序,提供一套全面的编码工具。

有多种可用的 IDE,一些流行的 Python IDE 包括:

  • Visual Studio代码:Visual Studio Code 是轻量级且用户友好的,非常适合初学者。
  • PyCharm:PyCharm 功能丰富,广泛应用于专业环境中。
  • Jupyter笔记本:Jupyter Notebook 非常适合交互式和探索性编码。

安装方式:

  • 从提供的链接下载并安装您选择的 IDE。
  • 请按照适用于您的操作系统的安装说明进行操作。

现在我们的项目已经建立,我们准备开始抓取房地产经纪人。在下一节中,我们将开始从 Realtor.com 上的单个房产中提取数据。

3. 创建 Realtor.com 抓取工具

在本节中,我们将卷起袖子,使用 Python 创建一个简单的 Realtor.com 抓取工具。我们的目标是分析 Realtor.com 上的房产页面并提取有价值的数据。

分析 Realtor.com 房产页面

当我们想要从 Realtor.com 抓取数据时,我们要做的第一件事就是仔细研究属性页面的构建方式。首先,我们将检查特定的属性页 - 例如,让我们考虑以下页面:

Realtor.com - 房产列表

房地产经纪人房产页面

只需右键单击浏览器中的网页并选择“检查”即可。这将显示开发人员工具,允许您探索 HTML 结构。我们探索 HTML,我们发现了什么?名为的隐藏脚本 __NEXT_DATA__.

脚本快照

这个脚本不仅揭示了显而易见的事情,而且还揭示了一些显而易见的事情。它共享所有细节,甚至是您乍一看可能没有注意到的细节。现在,让我们编写一个 Python 脚本来从 Realtor.com 属性页中抓取这些数据。

使用 Python 从单个属性中提取数据

现在,让我们进入一些代码以从单个属性页中提取数据。我们将使用 beautifulsoup4 用于解析 HTML 和 requests 用于发出 HTTP 请求。

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

DEF 发出请求(网址):
"""向给定的 URL 发出尊重的请求。"""
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0”,
“接受”: “文本/ html,应用程序/ xhtml + xml,应用程序/ xml;q = 0.9,图像/ webp,图像/ apng,* / *;q = 0.8”,
“接受语言”: “en-US,en;q=0.9”,
“接受编码”: “gzip、放气、br”,
“升级不安全请求”: “1”,
“秒获取模式”: “导航”,
“秒获取用户”: “?1”,
“秒获取站点”: “没有”,
“秒获取目标”: “文档”,
“推荐人”: “https://www.google.com/”,
“不”: “1”,
“秒-gpc”: “1”,
}
尝试:
响应 = requests.get(url, headers=HEADERS)
响应.raise_for_status() # 对于错误请求引发 HTTPError
回报 响应
requests.exceptions.RequestException as e:
打印(f"无法检索数据 {网址}。错误: {e}")
回报 不包含

DEF 从脚本中提取数据():
"""提取脚本元素内的编码文本。"""
script_element = soup.find('脚本',{'ID': '__下一个数据__'})
if 脚本元素:
回报 script_element.text
其他:
打印(“未发现隐藏的网络数据。”)
回报 不包含

DEF 解析json(数据文本):
"""将脚本语言转换为 JSON 格式。"""
尝试:
data_json = json.loads(data_text)
回报 数据_json['道具']['页面道具']。得到('初始Redux状态', 不包含)
json.JSONDecodeError as e:
打印(f"解码 JSON 时出错: {e}")
回报 不包含

DEF scrap_realtor_property(网址):
"""从 Realtor.com 上的单个房产中抓取数据。"""
响应 = make_request(url)

if 响应:
汤 = BeautifulSoup(response.text, 'html.parser')
data_text = extract_data_from_script(汤)

if 数据文本:
property_dataset = parse_json(data_text)
if 属性数据集:
回报 属性数据集

回报 不包含

DEF ():
"""执行脚本的主要函数。"""
# 我们在 Realtor.com 上选择的房产页面的 URL
属性_url = 'https://www.realtor.com/realestateandhomes-detail/3431-Greenfield-Ave_Los-Angeles_CA_90034_M29505-59111'

# 从单个属性中提取数据
结果 = scrape_realtor_property(property_url)

# 显示结果
if 结果:
打印(json.dumps(结果,缩进=2))

if __名字__ == “__主要的__”:
主()

在我们的 Python 脚本中,我们创建了一组函数来有效地导航 Realtor.com 的属性页面。这 make_request 函数使用旨在模仿 Web 浏览器的增强标头礼貌地从所选属性的 URL 请求数据。这 extract_data_from_script 函数深入研究页面上的脚本,揭示隐藏的信息。然后,该信息被转换为可理解的格式 parse_json 功能。关键功能, scrape_realtor_property,协调这些行动以发现大量的房地产数据。这 main 我们的中心人物函数成为焦点,展示了脚本的发现。这是一次数字探索,揭示 Realtor.com 网页中的见解,并准备分享这些有价值的发现。

运行脚本:

打开您喜欢的文本编辑器或 IDE,复制提供的代码,并将其保存在 Python 文件中。例如,将其命名为 realtor_scraper.py.

打开终端或命令提示符并导航到您保存的目录 realtor_scraper.py。使用以下命令执行脚本:

1
蟒蛇realtor_scraper.py

示例输出:

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
{
“饼干”: {},
“询问”: {
“蛞蝓”: [
“3431-Greenfield-Ave_Los-Angeles_CA_90034_M29505-59111”
]
},
“索赔模态”: {
“扳机”: ,
“初始视图”: ,
“可见的”: false,
“财产”: ,
“目前来看”:
},
“加载中”: {
“声明正在加载”: false,
“取消声明正在加载”: false,
“页面加载中”: false,
“避风港配置文件加载中”: true,
“附近的房屋正在加载”: true,
“现货报价加载中”: true,
“附近出租正在加载”: true,
“其他建筑房屋正在加载”: true,
“nh轮播加载中”: true
},
「社区详情」: {},
「房产详情」: {
“抵押”: {
“可承担的贷款”: {
“有资格”: false,
“交易日期”: ,
“平均率”: ,
“平均价格显示”: ,
“每月支付”: ,
“__类型名称”: “可承担的贷款”
},
..... 更多的

4. 查找 Realtor.com 房产

通过 Realtor.com 的搜索系统可以简化在 Realtor.com 上发现房产的过程。让我们深入研究 Realtor.com 上的搜索功能如何运作并探索抓取过程。

利用 Realtor.com 的搜索系统进行房产发现

Realtor.com 的搜索系统是一个强大的工具,可让我们根据各种条件查找房产,例如 位置、价格范围和房产类型。我们的目标是利用该系统有效地获取房产列表。

房地产经纪人搜索引擎结果页面

当我们执行搜索时,结果页面包含基本元数据,包括指定区域中可用的页面总数和列表。

搜索结果的 URL 结构遵循清晰的模式,方便我们的抓取:

1
https://www.realtor.com/realestateandhomes-search/<>\_<>/pg-<>

了解这种结构使我们能够设计一个能够利用城市和州等变量从指定地理位置提取所有房产列表的爬虫。

从特定位置抓取房产列表

让我们考虑一下我们想要 抓取加利福尼亚州洛杉矶的房产数据。为了实现这一目标,我们更新了之前的脚本并制作了一个名为 find_properties 的函数,该函数将州和城市作为参数。此函数构造适当的搜索 URL,向 Realtor.com 发出尊重的请求,然后解析搜索结果。

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

DEF 发出请求(网址):
"""向给定的 URL 发出尊重的请求。"""
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0”,
“接受”: “文本/ html,应用程序/ xhtml + xml,应用程序/ xml;q = 0.9,图像/ webp,图像/ apng,* / *;q = 0.8”,
“接受语言”: “en-US,en;q=0.9”,
“接受编码”: “gzip、放气、br”,
“升级不安全请求”: “1”,
“秒获取模式”: “导航”,
“秒获取用户”: “?1”,
“秒获取站点”: “没有”,
“秒获取目标”: “文档”,
“推荐人”: “https://www.google.com/”,
“不”: “1”,
“秒-gpc”: “1”,
}
尝试:
响应 = requests.get(url, headers=HEADERS)
响应.raise_for_status() # 对于错误请求引发 HTTPError
回报 响应
requests.exceptions.RequestException as e:
打印(f"无法检索数据 {网址}。错误: {e}")
回报 不包含

DEF 从脚本中提取数据():
"""提取脚本元素内的编码文本。"""
script_element = soup.find('脚本',{'ID': '__下一个数据__'})
if 脚本元素:
回报 script_element.text
其他:
打印(“未发现隐藏的网络数据。”)
回报 不包含

DEF 解析json(数据文本):
"""将脚本语言转换为 JSON 格式。"""
尝试:
data_json = json.loads(data_text)
回报 {
'结果': 数据_json['道具']['页面道具']['特性'] or 数据_json[“搜索结果”][“主页搜索”][“结果”],
'全部的': 数据_json['道具']['页面道具']['总属性'] or 数据_json['搜索结果']['主页搜索']['全部的']
}
json.JSONDecodeError as e:
打印(f"解码 JSON 时出错: {e}")
回报 不包含

DEF 查找属性(州、城市、max_pages=1):
"""在 Realtor.com 上搜索房产预览数据。"""
搜索结果 = []

页码 in 范围(1, 最大页数 + 1):
# 根据州、城市和页码构建搜索 URL
搜索网址 = f“https://www.realtor.com/realestateandhomes-search/{城市}_{状态.upper()}/pg-{页码}"

# 发出请求并解析搜索结果
search_response = make_request(search_url)
if 搜索响应:
search_soup = BeautifulSoup(search_response.text, 'html.parser')
data_text = 从脚本中提取数据(search_soup)

if 数据文本:
search_results.append(parse_json(data_text))

回报 搜索结果 if 搜索结果 其他 不包含

DEF ():
"""执行脚本的主要函数。"""
搜索结果=查找属性(“CA”, “洛杉矶”)
if 搜索结果:
打印(json.dumps(搜索结果,缩进=2))

if __名字__ == “__主要的__”:
主()

find_properties 函数中,循环遍历页码范围,使用提供的州、城市和页码动态构建每个页面的搜索 URL。对于每个 URL,都会使用以下方式发出尊重的请求 make_request 函数,并使用解析 HTML 内容 beautifulsoup4。然后提取包含属性信息的隐藏 Web 数据并将其处理为结构化 JSON 格式 parse_json 功能。每个页面的属性预览都附加到 search_results 列表,并返回最终的数据集。

示例输出:

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
[
{
“结果”: [
{
“属性_id”: “1783935941”,
“价格表”: 139000000,
“搜索促销”: ,
“主照片”: {
“参考”: "https://ap.rdcpix.com/03c22078a06cd1bbd7a73a45a0ad6a08l-m1746835519s.jpg"
},
“出租自有”: ,
“列表 ID”: “2960541535”,
“物质港”: false,
“虚拟旅游”: ,
“地位”: “出售”,
“产品”: {
“产品”: [
“核心代理”,
“核心经纪人”,
“共同破产”
],
“品牌”: “必需品”
},
“来源”: {
“ID”: “威卡”,
“类型”: “毫升”,
“规格 ID”: ,
“计划 ID”: ,
“代理人”: [
{
“办公室名称”:
}
]
},
“引导属性”: {
“show_contact_an_agent”: true,
“opcity_lead_attributes”: {
“现金返还已启用”: false,
“翻转市场启用”: true
},
“潜在客户类型”: “共同破产”,
“准备连接抵押”: {
“show_contact_a_lender”: false,
“show_veterans_united”: false
}
},
“社区”: ,
“永久链接”: “1200-Bel-Air-Rd_Los-Angeles_CA_90077_M17839-35941”,
“price_reduced_amount”: ,
“说明”: {
“名称”: ,
“床”: 12,
“浴场_综合”: “17”,
“平方英尺”: ,
“地块平方英尺”: 90661,
“最大沐浴次数”: ,
“bath_min”: ,
“床数分钟”: ,
“最大床数”: ,
“最小平方英尺”: ,
“最大平方英尺”: ,
“类型”: “单亲家庭”,
“子类型”: ,
“售价”: 5000000,
“售出日期”: “ 2014-01-07”
},
“地点”: {
“街道视图网址”: "https://maps.googleapis.com/maps/api/streetview?channel=rdc-streetview&client=gme-movesalesinc&location=1200%20Bel%20Air%20Rd%2C%20Los%20Angeles%2C%20CA%2090077&size=640x480&source=outdoor&signature=SMRMuUUmlluuaqqdjwbYoyJY6_s=",
“地址”: {
“线”: “贝莱尔路 1200 号”,
“邮政编码”: “90077”,
“状态”: “加利福尼亚”,
“状态代码”: “CA”,
“市”: “洛杉矶”,
“协调”: {
“拉特”: 34.095258,
“隆”: -118.443349
}
},
“县”: {
“名称”: “洛杉矶”,
“fips_代码”: “06037”
}
},
“开放日”: ,
“品牌”: [
{
“类型”: “办公室”,
“名称”: 《寻巢者》,
“照片”:
}
],
“旗帜”: {
“即将到来”: ,
“是新列表”: false,
“价格已降低”: ,
“是止赎”: ,
“是新建筑”: ,
“等待中”: ,
“是偶然的”:
},
“列表日期”: "2023-10-13T20:39:03.000000Z",
“相片”: [
{
“参考”: "https://ap.rdcpix.com/03c22078a06cd1bbd7a73a45a0ad6a08l-m1746835519s.jpg"
},
{
“参考”: "https://ap.rdcpix.com/03c22078a06cd1bbd7a73a45a0ad6a08l-m4249782786s.jpg"
}
],
“广告商”: [
{
“类型”: “卖方”,
“建设者”:
}
]
},
..... 更多的
],
“全部的”: 7505
}
]

5. 观察 Realtor.com 列表变化

通过 Realtor.com 强大的 RSS 源随时了解最新的房地产开发动态。本部分将指导您利用 Realtor.com 的 RSS 源来及时了解重要的房产更新。了解如何构建个性化的 RSS 提要抓取工具,以轻松监控这些变化并在房地产游戏中保持领先地位。

Realtor.com 用于跟踪房产变化的 RSS 源

Realtor.com 提供了一组专门的 RSS 源,每个源都针对不同的房地产活动。这些提要包括:

这些资源对于密切关注房地产动态非常方便。您可以随时关注价格调整、新房上市和销售情况!

每个提要均由美国各州组织,它只是一个包含公告和日期的简单 RSS XML 文件。例如,让我们看一下 洛杉矶 价格变化动态.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml 版本=“1.0” 编码=“utf-8”?>
<RSS xmlns:原子=“http://www.w3.org/2005/Atom” 版本=“2.0”>
<渠道>
<标题>价格已更改</标题>
<链接>https://www.realtor.com</链接>
<描述/>
<原子:链接 HREF=“https://pubsubhubbub.appspot.com/” REL=“中心”/>
<原子:链接 HREF=“https://www.realtor.com/realestateandhomes-detail/sitemap-rss-price/rss-price-la.xml” REL=“自己”/>
<项目>
<链接>https://www.realtor.com/rentals/details/1020-Terpsichore-St-Apt-F_New-Orleans_LA_70130_M79596-86987</链接>
<发布日期>26 年 2024 月 15 日星期一 42:33:XNUMX</发布日期>
</项目>
<项目>
<链接>https://www.realtor.com/realestateandhomes-detail/Springfield-Rd_Walker_LA_70785_M88932-83769</链接>
<发布日期>26 年 2024 月 15 日星期一 45:36:XNUMX</发布日期>
</项目>
<项目>
<链接>https://www.realtor.com/realestateandhomes-detail/7012-Highway-4_Ringgold_LA_71068_M87385-92048</链接>
<发布日期>26 年 2024 月 15 日星期一 50:06:XNUMX</发布日期>
</项目>
.....更多项目在这里
</渠道>
</RSS>

我们可以看到它包含属性和价格变化日期的链接。

编写 RSS feeds scraper 来监控变化

现在,让我们编写一个自定义 RSS 提要抓取器来主动监视和捕获 Realtor.com 列表中的更改。请遵循以下关键步骤:

  1. 定期刮掉饲料:
  • 将您的抓取工具设置为定期获取提要(例如,每 X 秒)。
  1. 解析属性 URL 的元素:
  • 从解析的 RSS 源中提取属性 URL。
  1. 利用 Property Scraper 收集数据集:
  • 使用您的财产抓取工具收集从提要获取的每个财产 URL 的详细数据集。
  1. 保存数据并重复:
  • 将收集到的数据保存到数据库或文件中。
  • 返回步骤 1 重复整个过程。

让我们看一个 Python 示例,了解如何实现此过程。在此 Atom RSS feed Scraper 中,我们每 5 分钟抓取一次 feed,并将结果附加到 JSON 列表文件中,每行一个 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
进口 要求
bs4 进口 美丽汤
进口 异步
进口 JSON
日期时间 进口 日期时间
路径库 进口 途径
xml文件 进口
io 进口 字节IO

# 注意: 插入来自 Realtor.com Property Scraper 的代码(第 3 节)

异步 DEF 抓取饲料(网址):
"""抓取 Atom RSS 提要并以“url: 发布日期”格式返回所有条目"""
响应 = make_request(url)
if 响应:
解析器 = etree.XMLParser(恢复=)
树 = etree.parse(BytesIO(response.text.encode('utf-8')), 解析器)
根 = 树.getroot()

结果= {}

项目 in 根.xpath(“//物品”):
条目_url = item.xpath(“链接/文本()”)[0] if 项目.xpath(“关联”) 其他 不包含
pub_date = item.xpath(“发布日期/文本()”)[0] if 项目.xpath(“发布日期”) 其他 不包含

# 在添加到结果之前检查entry_url和pub_date是否都不是None
if 入口地址 is 不能 不包含 发布日期 is 不能 不包含:
结果[entry_url] = datetime.strptime(pub_date, “%a,%d %b %Y %H:%M:%S”)

回报 结果

回报 不包含

异步 DEF 跟踪源(网址: STR,输出:路径,间隔: INT = 300):
"""跟踪 Realtor.com 源,抓取新列表并将其作为 JSON 附加到输出文件中。"""
见过= ()
输出.touch(exist_ok=)

尝试:
:
# 抓取列表的 feed
条目 = 等待 scrap_feed(网址)
属性=[]
# 删除之前循环中刮取的条目
条目 = {entry_url: pub_date 条目网址、发布日期 in 条目.items() if f"{条目网址}:{发布日期}" 不能 in 见过}
if 条目:
# 抓取属性并保存到文件 - 每行 1 个属性作为 JSON
网址 in 条目.keys():
属性.append(scrape_realtor_property(url))

输出。打开(“一种”) as f:
f.写("\n".join(json.dumps(财产) 财产 in 特性))

# 将已看到的条目添加到重复数据删除过滤器
条目网址、发布日期 in 条目.items():
看到.添加(f"{条目网址}:{发布日期}")

打印(f"刮掉 {LEN(特性)} 特性;等待 {间隔} 秒”)
等待 asyncio.sleep(间隔)

键盘中断:
打印(“停止 Feed 跟踪”)

异步 DEF ():
# 例如洛杉矶的价格信息
提要网址 = f“https://www.realtor.com/realestateandhomes-detail/sitemap-rss-price/rss-price-la.xml”

等待 track_feed(feed_url, 路径(“房地产经纪人价格-rss-feed-tracker.jsonl”))

if __名字__ == “__主要的__”:
asyncio.run(主())

scrape_feed 函数从 feed 中提取条目,其中包含属性 URL 及其发布日期,格式为“url: 发布日期”。这 track_feed 函数持续监视提要,抓取新列表,并将它们作为 JSON 条目附加到输出文件,同时避免重复。这 main 函数设置洛杉矶 Realtor.com 价格源的 URL 并启动跟踪过程,将结果保存到名为 realtor-price-rss-feed-tracker.jsonl。该程序使用异步运行 asyncio 图书馆。

6. 抓取 Realtor.com 的挑战和障碍

当从 Realtor.com 抓取数据时,您可能会遇到一些挑战。 Realtor.com 是一个动态平台,这意味着它的结构可能会发生变化,这使得持续查找和提取所需信息变得有点棘手。

抓取 realtor.com 的挑战

网站变更:

Realtor.com 喜欢保持新鲜感,其中包括其网站的外观和行为。因此,您可能会遇到站点设置方式发生变化的情况。这意味着您需要保持警惕并在需要时调整刮擦方法。

防刮措施:

为了保护其数据,Realtor.com 采取了检测和阻止自动抓取的措施。这可能会导致您的 IP 被禁止或面临那些烦人的验证码挑战。为了解决这个问题,您需要明智地了解与网站的交互方式以避免被发现。

避免 IP 封锁:

如果您的抓取过于激进,Realtor.com 可能会阻止您的 IP 或限制您的访问。为了防止这种情况,您可以控制发出请求的速率并在不同的代理 IP 地址之间切换。 Crawlbase 爬行 API 可以方便地绕过这些限制。

处理 JavaScript:

Realtor.com 的某些部分使用 JavaScript 来显示内容。为了确保您获取所需的一切,您可能需要稍微调整一下抓取方法。

应对这些挑战需要一些技巧,但只要采取正确的策略,您就可以渡过难关并获得所需的数据。在下一节中,我们将探讨 Crawlbase 抓取 API 如何成为一个有价值的工具,使您的抓取工作更加高效和可扩展。

7. 使用 Crawlbase 扩展 Realtor.com 抓取规模

现在,我们来谈谈如何将 Realtor.com 抓取游戏提升到一个新的水平。扩大你的努力可能具有挑战性,特别是在处理反抓取措施和限制时。这就是 Crawlbase 爬行 API 作为强大盟友发挥作用的地方。

Crawlbase 爬取 API 用于反抓取和绕过限制

Realtor.com 与许多网站一样,并不总是喜欢自动抓取。他们可能已采取措施来检测和阻止此类活动。这就是 Crawlbase 爬行 API 成为您的秘密武器的地方。

防刮保护:

Crawlbase Crawling API 配备了模仿人类交互的功能,可帮助您在雷达下飞行。它可以更智能地浏览网站,避免检测和潜在的禁令。

绕过IP封锁:

如果您曾经因 IP 被封锁而感到沮丧,Crawlbase 可以帮助您。它可以让你 轮换不同的IP地址,防止任何讨厌的阻塞并确保不间断的刮擦。

使用 Crawlbase 抓取 API 创建 Realtor.com Scraper

现在,让我们动手实践一下。如何将 Crawlbase 抓取 API 集成到 Realtor.com 抓取工具中?按着这些次序:

  1. 注册 Crawlbase:

前往 Crawlbase 网站并 注册账户 为一个帐户。注册后,我们将为您提供两种类型的API令牌(普通令牌、JS令牌)。您需要在使用 Crawlbase 爬网 API 进行身份验证时提供这些令牌之一。

  1. 选择代币:

Crawlbase 提供两种类型的令牌,即为静态网站量身定制的普通令牌和为动态或 JavaScript 驱动的网站设计的 JS 令牌。由于我们的重点是抓取 realtor.com,Normal 代币是一个不错的选择。

请注意: 前 1000 个请求免费。 无需卡。

  1. 安装 Crawlbase 库:

使用 pip 安装 Crawlbase 库。该库将成为 Python 脚本和 Crawlbase 爬行 API 之间的桥梁。

1
$ pip 安装爬网库

阅读 Crawlbase Python 库文档 点击此处.

  1. 调整你的脚本:

要使用 Crawlbase 抓取 API 进入 Realtor.com 抓取工具而不是请求库来发出 HTTP 请求,您可以创建如下所示的函数并使用此函数发出请求。

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']}")
回报 不包含

通过将 Crawlbase 无缝集成到我们的 Realtor.com 抓取工具中,我们可以增强我们的抓取能力,通过反抓取措施和限制确保更顺畅的导航。 Realtor.com 抓取和 Crawlbase 的动态组合使我们能够更高效、更大规模地提取数据。

8. 最后的想法

从 Realtor.com 抓取的房地产数据需要简单性和效率之间的平衡。虽然传统方法有其优点,但结合 Crawlbase 抓取 API 可以提升您的抓取体验。告别常见的挑战,通过用于 Realtor.com 抓取的 Crawlbase 抓取 API 拥抱无缝、值得信赖且可扩展的解决方案。

对于那些渴望探索从不同平台抓取数据的人,请深入研究我们富有洞察力的指南:

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

充满信心地踏上您的刮擦之旅!如果您遇到任何障碍或寻求指导,我们的 敬业的团队 随时准备在您驾驭不断变化的房地产数据领域时为您提供帮助。快乐刮擦!

9. 常见问题 (FAQ)

问:为什么我应该从 Realtor.com 上抓取房地产数据?

Realtor.com 是美国最大的房地产网站之一,使其成为庞大公共房地产数据集的无与伦比的来源。该数据集包含重要的详细信息,例如房地产价格、位置、销售日期和综合房地产信息。抓取 Realtor.com 对于市场分析、了解房地产行业趋势以及全面了解竞争对手而言非常宝贵。

问:我可以使用哪些工具和库进行 Realtor.com 抓取?

当深入研究 Realtor.com 抓取时,Python 被证明是一个可靠的选择。利用流行的库,例如 requests 用于发出 HTTP 请求和 BeautifulSoup4 HTML 解析简化了抓取过程。对于可扩展的抓取,您可以探索 Crawlbase Crawling API 等高级解决方案。这些服务为克服反抓取机制等挑战提供了有效的措施。

问:如何实时跟踪 Realtor.com 列表的变化?

Realtor.com 提供便捷的 RSS 源,可及时宣布各种房产变化,包括价格变更、开放日活动、正在出售的房产和新列表。要实时关注这些变化,您可以开发自定义 RSS 提要抓取器。该抓取工具可以编程为定期运行,确保您及时了解房地产市场的最新发展。

问:在抓取 Realtor.com 时,我可以采取哪些措施来避免被阻止?

大规模抓取通常会带来被阻止或遇到验证码的风险。为了缓解这种情况,请考虑利用 Crawlbase Crawling API 等高级服务。这些平台提供诸如反抓取保护绕过、JavaScript 渲染以及访问大量住宅或移动代理等功能。这些措施共同确保了更顺畅的抓取体验而不会中断。