Trulia 是一个受欢迎的房地产网站,提供了大量信息,可以通过抓取这些信息来收集见解和趋势。 Trulia 提供大量房地产数据,包括房产列表、价格和市场趋势。 Trulia 凭借其用户友好的界面和全面的数据,成为购房者和房地产专业人士的首选目的地。

46.5 年 2024 月访问量达到 XNUMX 万次随着数百万用户每月积极寻找房屋、公寓和租金,Trulia 是提取和分析有价值数据的主要目标。 Trulia 是一个房地产巨头,拥有数百万条房产记录,使其成为市场分析和研究的金矿。

对于希望分析市场动态、识别投资机会或跟踪房地产价格的房地产专业人士、投资者或研究人员来说,抓取 Trulia 特别有用。通过网络抓取,您可以有效地收集最新信息并获得竞争优势。

在本分步指南中,我们将引导您完成使用 Python 语言抓取 Trulia 的整个过程。那么,让我们开始吧!

目录

  1. 了解项目范围
  2. 先决条件
  3. 项目设置
  • 安装依赖关系
  • 选择 IDE
  1. 提取 Trulia SERP HTML
  • 使用通用方法提取 HTML
  • 使用通用方法抓取 Trulia 时面临的挑战
  • 使用 Crawlbase 抓取 API 提取 HTML
  1. 抓取 Trulia SERP 列表
  2. 刮Trulia价格
  3. 抓取 Trulia 地址
  4. 刮取 Trulia 财产规模
  5. 刮取 Trulia 房产卧室数量
  6. 刮取 Trulia 房产浴场数量
  7. 刮取 Trulia 房地产经纪人
  8. 抓取 Trulia 图片
  9. 抓取 Trulia 属性页链接
  10. 完整的代码
  11. 处理分页和保存数据
  • 处理分页
  • 将抓取的数据保存到 Excel 文件中
  • 将分页和保存操作集成到脚本中
  1. 最后的思考
  2. 常见问题解答(FAQ)
  • 刮取 Trulia 合法吗?
  • 为什么要刮Trulia?
  • 您可以从 Trulia 中获取什么?
  • 刮 Trulia 的最佳方法是什么?

1. 了解项目范围

在本指南中,我们的目标是创建一个关于使用 Python 和 Crawlbase Crawling API 抓取 Trulia 的用户友好教程。该项目范围涉及利用基本工具,例如用于 HTML 解析的 Python BeautifulSoup 库和用于高效数据提取过程的 Crawlbase Crawling API。

我们将专注于从 Trulia 列表中抓取各种元素,包括 属性名称、地址、评级、评论和图像。目的是提供一种循序渐进的方法,使具有不同技术专业水平的用户可以使用它。

该项目的关键组成部分:

  1. HTML抓取:我们将使用 Python 和 Crawlbase Crawling API 来检索 Trulia 列表的完整 HTML 内容。这确保了有效的数据提取,同时遵守 Trulia 的使用政策。将提供该项目的目标 URL 以供实际操作体验。

我们将从该 URL 中抓取位置“加利福尼亚州洛杉矶”的 Trulia 房产列表。

Trulia 搜索结果页面
  1. 从 Trulia 中提取数据:我们的主要重点是使用 Python 中的 BeautifulSoup 从 Trulia 列表中提取特定的数据元素。这包括抓取属性名称、地址、评级、评论和图像。
  2. 处理分页:为了涵盖 Trulia 列表的多个页面,我们将讨论处理分页的技术,以确保捕获所有相关数据。
  3. 保存数据:我们将探索存储或保存抓取数据的方法,提供保存到 CSV 文件以供进一步分析等选项。

通过概述项目范围,我们的目标是指导您完成全面的 Trulia 抓取教程,使该过程易于理解和实现。现在,让我们继续讨论该项目的先决条件。

2。 先决条件

在沉浸在使用 Python 进行网络抓取 Trulia 的世界之前,让我们先确定确保旅程顺利的基本先决条件:

  1. Python基础知识:

对 Python 编程语言有基本的了解至关重要。如果 Python 对您来说是新手,请考虑探索介绍性的 教程 或课程来掌握基础知识。

  1. 具有 API 凭据的 Crawlbase 帐户:

获取 Crawlbase 上的活动帐户以及 API 凭据,以便以编程方式访问 Trulia 页面。 注册 让 Crawlbase 抓取 API 接收您的初始 1,000 个请求并保护您的 API 凭据 账户文件.

  1. 选择代币:

Crawlbase 提供两种类型的令牌 - 一种是为静态网站量身定制的,另一种是为动态或 JavaScript 驱动的网站设计的。 Trulia 使用 JS 渲染来加载网站上的数据。所以,我们使用 JS 令牌。

  1. Python 安装在你的机器上:

你可以从官方下载Python Python网站 基于您的操作系统。此外,确认 pip(Python 包管理器)的存在,它通常与 Python 安装捆绑在一起。

1
2
3
4
5
# 使用此命令验证 python 安装
python --version

# 使用此命令验证 pip 安装
点 - 翻译

3. 项目设置

在我们深入抓取 trulia.com 之前,让我们先设置我们的项目以确保我们拥有所需的一切。

安装依赖关系

现在,让我们通过安装必要的库来准备我们的工具。这些库就像超级英雄一样,将帮助我们毫不费力地抓取 Trulia。请按照以下简单步骤操作:

  1. 打开终端或命令提示符:

根据您的操作系统,打开终端或命令提示符。

  1. Install 安装 requests:

requests 库帮助我们轻松发出 HTTP 请求。输入以下命令并按 Enter:

1
点安装请求
  1. Install 安装 beautifulsoup4:

BeautifulSoup 有助于 HTML 解析,使我们能够无缝导航和提取数据。使用以下命令来安装它:

1
点安装beautifulsoup4
  1. Install 安装 pandas:

Pandas 是我们的数据处理动力源,可以有效处理抓取的数据。运行以下命令来安装它:

1
pip 安装熊猫
  1. 安装爬网库:

Crawlbase 库与 Crawlbase 抓取 API 集成,简化了我们的网页抓取过程。使用以下命令安装 Crawlbase 库:

1
点安装爬虫库

选择 IDE

现在 Python 和基本库已准备就绪,让我们选择一个集成开发环境 (IDE),让我们的编码体验变得简单而愉快。有多种 IDE 可供使用,以下是一些用户友好的 Python 选项:

在接下来的部分中,我们将首先从 trulia.com 上的单个属性中提取数据。让我们开始刮痧之旅吧!

4. 提取 Trulia SERP HTML

当谈到抓取 Trulia 时,我们的第一步是检索搜索引擎结果页面 (SERP) 的原始 HTML 内容。这为提取有价值的信息奠定了基础。让我们探讨两种方法:通用方法和使用 Crawlbase 爬行 API 的智能方法。

使用通用方法提取 HTML

当涉及到提取 HTML 时,常见的方法涉及使用 Python 库,例如 requestsBeautifulSoup。这些库允许我们向 Trulia 网站发送请求,然后解析接收到的 HTML 数据。

1
2
3
4
5
6
7
8
9
10
进口 要求

# 指定 Trulia SERP URL
trulia_serp_url = “https://www.trulia.com/CA/Los_Angeles/”

# 发出 GET 请求来获取 HTML
响应 = requests.get(trulia_serp_url)

# 打印HTML内容
打印(响应.文本)

运行脚本:

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

1
python trulia_scraper.py

当您按下 Enter 键时,您的脚本就会生效,向 Trulia 网站发送请求,检索 HTML 内容并将其显示在您的终端上。

输出 HTML 快照

使用通用方法抓取 Trulia 时面临的挑战

当我们在抓取 Trulia 的道路上前进时,我们在依赖常见或传统方法时遇到了某些挑战。让我们来了解一下这些障碍:

  1. 防刮措施

Trulia 实施保护措施来保护其网站免遭自动抓取。这些措施通常包括验证码和速率限制,这使得传统的抓取方法很难顺利地收集数据。

相关阅读: 如何绕过验证码

  1. 动态内容

Trulia 的网站广泛利用 JavaScript 来加载动态内容。传统的抓取可能难以有效地捕获这些动态数据,从而导致信息检索不完整或不准确。

这些挑战凸显了对更复杂方法的需求,我们将使用增强的功能来解决这个问题 Crawlbase 爬取 API 在后续部分中。

使用 Crawlbase 抓取 API 提取 HTML

Crawlbase 抓取 API 提供了更强大的解决方案,克服了常见的抓取挑战。它允许高效的 HTML 提取、处理动态内容并确保遵守 Trulia 的使用策略。它是 参数 让我们能够毫不费力地处理各种抓取任务。

我们将纳入 ajax_waitpage_wait 参数以确保我们在页面完全加载后获取 HTML。以下是使用 Crawlbase 库的 Python 函数示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 爬行基地 进口 抓取API

# 将占位符“CRAWLBASE_JS_TOKEN”替换为您的 JS 令牌
爬行 API = 爬行 API({ '令牌': 'CRAWLBASE_JS_TOKEN' })

选项= {
'ajax_等待': '真的',
'页面等待': 8000
}

DEF make_crawlbase_request(网址):
全球化 爬行API,选项

响应=crawling_api.get(url,选项)

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

5. 抓取 Trulia SERP 列表

在深入研究特定元素之前,让我们创建一个函数来从 SERP 获取所有属性列表。这将作为提取个人详细信息的基础。

抓取 Trulia 搜索列表

每个清单都在里面 li 元素和所有 li 元素在里面 ul 元素与 data-testid as search-result-list-container.

1
2
3
4
5
6
7
8
9
10
11
12
# 导入必要的库
bs4 进口 美丽汤

# 抓取 Trulia 列表的函数
DEF scrape_trulia_列表(html_内容):
尝试:
汤 = BeautifulSoup(html_content, 'html.parser')
Listing_containers = soup.select('ul[data-testid="search-result-list-container"] > li')
回报 列表容器
特殊课程 as e:
打印(f“抓取 Trulia 列表时发生错误: {STR(e)}")
回报 不包含

6. 刮Trulia价格

让我们创建一个函数来从搜索结果中抓取房地产价格。

刮 Trulia 价格

当您检查价格时,您会看到它包含在 div 上课 data-testid as property-price.

1
2
3
4
5
6
7
8
9
# 抓取 Trulia 价格的函数
DEF scrape_trulia_价格(清单):
尝试:
价格元素 = 列表.select_one('div[data-testid="房产价格"]')
property_price = Price_element.text.strip() if 价格元素 其他 不包含
回报 房产价格
特殊课程 as e:
打印(f“抓取 Trulia 价格时发生错误: {STR(e)}")
回报 不包含

7. 抓取 Trulia 地址

现在,让我们获取属性地址。

抓取 Trulia 地址

地址附在 div 上课 data-testid as property-address.

1
2
3
4
5
6
7
8
9
# 抓取 Trulia 地址的函数
DEF scrape_trulia_地址(清单):
尝试:
地址元素 = 列表.select_one('div[data-testid="属性地址"]')
property_address = address_element.text.strip() if 地址元素 其他 不包含
回报 属性地址
特殊课程 as e:
打印(f“抓取 Trulia 地址时发生错误: {STR(e)}")
回报 不包含

8. 刮取 Trulia 财产规模

接下来是提取属性大小。

刮取 Trulia 财产规模

属性大小包含在 div 上课 data-testid as property-floorSpace.

1
2
3
4
5
6
7
8
9
# 抓取 Trulia 属性大小的函数
DEF scrape_trulia_property_size(清单):
尝试:
size_element = 列表.select_one('div[data-testid="property-floorSpace"]')
property_size = size_element.text.strip() if 尺寸元素 其他 不包含
回报 属性大小
特殊课程 as e:
打印(f“抓取 Trulia 属性大小时发生错误: {STR(e)}")
回报 不包含

9. 统计 Trulia 房产的卧室数量

现在,让我们创建一个函数来获取该房产的卧室数量。

卧室数量包含在 div 上课 data-testid as property-beds.

1
2
3
4
5
6
7
8
9
# 抓取 Trulia 房产卧室数量的函数
DEF scrape_trulia_property_bedrooms_count(清单):
尝试:
卧室计数元素 = 列表.select_one('div[data-testid="property-beds"]')
property_bedrooms_count = 卧室_count_element.text.strip() if 卧室数元素 其他 不包含
回报 房产卧室数
特殊课程 as e:
打印(f“抓取 Trulia 房产卧室数量时发生错误: {STR(e)}")
回报 不包含

10. 收集 Trulia 房产浴场数量

现在,让我们创建一个函数来获取该属性的浴室数量。

浴室数量包含在 div 上课 data-testid as property-baths.

1
2
3
4
5
6
7
8
9
# 抓取 Trulia 房产浴池数量的函数
DEF scrape_trulia_property_baths_count(清单):
尝试:
Baths_count_element = 列表.select_one('div[data-testid="property-baths"]')
property_baths_count = Baths_count_element.text.strip() if 浴池计数元素 其他 不包含
回报 property_baths_count
特殊课程 as e:
打印(f“抓取 Trulia 浴池计数时发生错误: {STR(e)}")
回报 不包含

11. 刮取 Trulia 房地产经纪人

现在,让我们了解一下房产中介的信息。

刮取 Trulia 房地产经纪人

房地产经纪人信息可以在 div 具有属性 data-testid 有价值 property-card-listing-summary.

1
2
3
4
5
6
7
8
9
# 抓取 Trulia 房产代理的函数
DEF scrape_trulia_property_agent(清单):
尝试:
agent_info_element = 列表.select_one('div[data-testid="property-card-listing-summary"]')
agent_info = agent_info_element.text.strip() if 代理信息元素 其他 不包含
回报 代理信息
特殊课程 as e:
打印(f“抓取 Trulia 房地产代理信息时发生错误: {STR(e)}")
回报 不包含

12. 抓取 Trulia 图片

捕捉房产图像至关重要。这是一个获取这些的函数。

抓取 Trulia 图像

所有图像都存在于 div 全班同学都盯着 SwipeableContainer__Container。一旦我们获得了元素,我们就可以抓取所有的元素 img element src 属性来获取图像链接。

现在,让我们获取属性详细信息页面链接。

抓取 Trulia 属性页面链接

属性页链接可以在 a 具有属性的元素 data-testid 有价值 property-card-link.

1
2
3
4
5
6
7
8
9
# 抓取 Trulia 属性页链接的函数
DEF scrape_trulia_property_page_link(清单):
尝试:
property_link_element = 列表.select_one('a[data-testid="属性卡链接"]')
属性_链接= 'https://www.trulia.com' + 属性_链接_元素['href'] if 属性链接元素 其他 不包含
回报 属性_链接
特殊课程 as e:
打印(f“抓取 Trulia 属性链接时发生错误: {STR(e)}")
回报 不包含

14. 完整代码

现在,让我们结合这些函数来创建一个用于抓取 Trulia 搜索结果的综合脚本。

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
# 导入必要的库
bs4 进口 美丽汤
爬行基地 进口 抓取API
进口 JSON

# 将占位符“CRAWLBASE_JS_TOKEN”替换为您的 JS 令牌
爬行 API = 爬行 API({ '令牌': 'CRAWLBASE_JS_TOKEN' })

选项= {
'ajax_等待': '真的',
'页面等待': 8000
}

DEF make_crawlbase_request(网址):
全球化 爬行API,选项

响应=crawling_api.get(url,选项)

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

# 抓取 Trulia 列表的函数
DEF scrape_trulia_列表(html_内容):
尝试:
汤 = BeautifulSoup(html_content, 'html.parser')
Listing_containers = soup.select('ul[data-testid="search-result-list-container"] > li')
回报 列表容器
特殊课程 as e:
打印(f“抓取 Trulia 列表时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 价格的函数
DEF scrape_trulia_价格(清单):
尝试:
价格元素 = 列表.select_one('div[data-testid="房产价格"]')
property_price = Price_element.text.strip() if 价格元素 其他 不包含
回报 房产价格
特殊课程 as e:
打印(f“抓取 Trulia 价格时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 地址的函数
DEF scrape_trulia_地址(清单):
尝试:
地址元素 = 列表.select_one('div[data-testid="属性地址"]')
property_address = address_element.text.strip() if 地址元素 其他 不包含
回报 属性地址
特殊课程 as e:
打印(f“抓取 Trulia 地址时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 属性大小的函数
DEF scrape_trulia_property_size(清单):
尝试:
size_element = 列表.select_one('div[data-testid="property-floorSpace"]')
property_size = size_element.text.strip() if 尺寸元素 其他 不包含
回报 属性大小
特殊课程 as e:
打印(f“抓取 Trulia 属性大小时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 房产卧室数量的函数
DEF scrape_trulia_property_bedrooms_count(清单):
尝试:
卧室计数元素 = 列表.select_one('div[data-testid="property-beds"]')
property_bedrooms_count = 卧室_count_element.text.strip() if 卧室数元素 其他 不包含
回报 房产卧室数
特殊课程 as e:
打印(f“抓取 Trulia 房产卧室数量时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 房产浴池数量的函数
DEF scrape_trulia_property_baths_count(清单):
尝试:
Baths_count_element = 列表.select_one('div[data-testid="property-baths"]')
property_baths_count = Baths_count_element.text.strip() if 浴池计数元素 其他 不包含
回报 property_baths_count
特殊课程 as e:
打印(f“抓取 Trulia 浴池计数时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 房产代理的函数
DEF scrape_trulia_property_agent(清单):
尝试:
agent_info_element = 列表.select_one('div[data-testid="property-card-listing-summary"]')
agent_info = agent_info_element.text.strip() if 代理信息元素 其他 不包含
回报 代理信息
特殊课程 as e:
打印(f“抓取 Trulia 房地产代理信息时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 图像的函数
DEF scrape_trulia_图像(清单):
尝试:
images_container = 列表.select_one('div[class^="SwipeableContainer__Container"]')
图像_url = [img['源代码'] IMG in images_container.find_all('img')] if 图片容器 其他 不包含
回报 图片网址
特殊课程 as e:
打印(f“抓取 Trulia 图像时发生错误: {STR(e)}")
回报 不包含

# 抓取 Trulia 属性页链接的函数
DEF scrape_trulia_property_page_link(清单):
尝试:
property_link_element = 列表.select_one('a[data-testid="属性卡链接"]')
属性_链接= 'https://www.trulia.com' + 属性_链接_元素['href'] if 属性链接元素 其他 不包含
回报 属性_链接
特殊课程 as e:
打印(f“抓取 Trulia 属性链接时发生错误: {STR(e)}")
回报 不包含


# 协调抓取过程的主要函数
DEF ():
# 指定 Trulia SERP URL
trulia_serp_url = “https://www.trulia.com/CA/Los_Angeles/”

# 初始化一个空列表来存储抓取的结果
抓取结果 = []

# 获取 HTML 内容
html_content = make_crawlbase_request(trulia_serp_url)

# 抓取 Trulia 列表
trulia_listings = scrape_trulia_listings(html_content)

# 检查 trulia_listings 是否为空
if 不能 trulia_清单:
打印(“未能抓取 Trulia 列表。” 第 {page_number} 页。)
回报

trulia_列表 in trulia_清单:

# 抓取个人详细信息
价格 = scrape_trulia_price(trulia_listing)
地址 = scrape_trulia_address(trulia_listing)
大小 = scrape_trulia_property_size(trulia_listing)
卧室 = scrape_trulia_property_bedrooms_count(trulia_listing)
浴场 = scrape_trulia_property_baths_count(trulia_listing)
代理 = scrape_trulia_property_agent(trulia_listing)
图像 = scrape_trulia_images(trulia_listing)
链接 = scrape_trulia_property_page_link(trulia_listing)

# 将结果添加到列表中
结果字典 = {
“房产价格”: 价格,
“房产地址”: 地址,
“财产规模”: 尺寸,
“卧室数”: 卧室,
《洗澡计数》: 洗澡,
“房产经纪人”: 代理人,
“财产图片”: 图片,
“财产链接”: 关联
}
scraped_results.append(result_dict)

# 打印抓取的结果
打印(json.dumps(scraped_results, 缩进=2))

# 执行主函数
if __名字__ == “__主要的__”:
主()

示例输出:

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
[
{
「物业价格」: “ $ 4,750,000”,
「物业地址」: “9240 W National Blvd,洛杉矶,CA 90034”,
「物业规模」: “6,045 平方英尺”,
《卧室数》: “9bd”,
《洗澡次数》: “9ba”,
《房产经纪人》: “琳达·莫雷 DRE # 01294670,纳尔逊·谢尔顿房地产时代动力”,
“财产图片”: [
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/08a4055f550f0fa020725a51462c640d-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/00dd9e16a4c3cd40828d42b466e6daa8-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/1ca58dfc05b73fe31d9eaadc3fb6ddce-full.webp"
],
“房产链接”: “9240 W National Blvd,洛杉矶,CA 90034”
},
{
「物业价格」: “ $ 3,695,000”,
「物业地址」: “110 N Kings Rd,洛杉矶,CA 90048”,
「物业规模」: “8,822 平方英尺”,
《卧室数》: “8bd”,
《洗澡次数》: “8ba”,
《房产经纪人》: “乔纳森·塔克萨 DRE # 01366169,Remax 商业和投资房地产”,
“财产图片”: [
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/915e6f92eea944a2a0debba76b13da55-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/1c7c779b8ea4bbb2396b69931ae0e08d-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/8b2ba082406829e89976e4011eaf1b1e-full.webp"
],
“房产链接”: “110 N Kings Rd,洛杉矶,CA 90048”
},
{
「物业价格」: “ $ 1,499,999”,
「物业地址」: “245 Windward Ave,威尼斯,CA 90291”,
「物业规模」: “1,332 平方英尺”,
《卧室数》: “4bd”,
《洗澡次数》: “3ba”,
《房产经纪人》: “尼古拉斯·赫德伯格 DRE # 02016456,KW Advisors”,
“财产图片”: [
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/02ae27dc84e684f8e843b931d3086040-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/c5ba854452c3f0705e34ae442e9c5f41-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/8b4ad6000af4e365477c196f51eeb19f-full.webp"
],
“房产链接”: “245 Windward Ave,威尼斯,CA 90291”
},
{
「物业价格」: “ $ 2,161,000”,
「物业地址」: “10425 阿瓦隆大道,洛杉矶,CA 90003”,
「物业规模」: ,
《卧室数》: ,
《洗澡次数》: ,
《房产经纪人》: “达里奥·斯维德勒 DRE # 01884474,凯勒·威廉姆斯比佛利山庄”,
“财产图片”: [
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/bdb5e983a8cb57a0f2ad8a5b036d6424-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/6a3b35961617885210eafabc768273a1-full.webp",
"https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/c0cf746206d1ce3b973f7613b6967f20-full.webp"
],
“房产链接”: “10425 阿瓦隆大道,洛杉矶,CA 90003”
},
..... 更多的
]

15. 处理分页和保存数据

我们的 Trulia 抓取之旅仍在继续,我们解决了两个关键方面:处理分页以访问多个搜索结果页面以及将抓取的数据保存到方便的 Excel 文件中。

处理分页

Trulia 经常使用分页来显示大量搜索结果。我们需要系统地浏览这些页面。

处理 trulia 网站分页

Trulia 使用特定的基于路径的方法,为每个页面分配一个序列号。例如,第一页的路径为 /1_p/,第二页使用 /2_p/,等等。

下面是一个处理分页并获取给定页面的 HTML 内容的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用 Trulia 分页获取 HTML 内容的函数
DEF fetch_html_with_pagination(基本网址、页码):
尝试:
# 构造带有分页路径的 URL
页面网址 = f"{base_url}/{页码}_p/”

# 使用 Crawlbase 抓取 API 获取 HTML 内容
html_content = make_crawlbase_request(page_url)

回报 html_内容
特殊课程 as e:
打印(f“使用分页获取 HTML 时发生错误: {STR(e)}")
回报 不包含

将抓取的数据保存到 Excel 文件中

一旦我们抓取了多个页面,保存来之不易的数据就至关重要。下面是我们如何使用 pandas 图书馆:

1
2
3
4
5
6
7
8
9
10
11
进口 大熊猫 as pd

DEF 保存到Excel(数据,文件路径='trulia_scraped_data.xlsx'):
尝试:
# 从抓取的数据创建一个DataFrame
df = pd.DataFrame(数据)
# 将 DataFrame 保存到 Excel 文件
df.to_excel(文件路径,索引=)
打印(f"数据成功保存至 {文件路径}")
特殊课程 as e:
打印(f“将数据保存到 Excel 时发生错误: {STR(e)}")

将分页和保存操作集成到脚本中

现在,让我们将这些函数集成到上一节中的现有脚本中。在脚本中添加上述函数并替换现有的 main 更新后的功能:

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
DEF ():
# 指定 Trulia SERP URL
基本网址 = “https://www.trulia.com/CA/Los_Angeles”

# 初始化一个空列表来存储抓取的结果
抓取结果 = []

# 定义要抓取的页面数
要抓取的页数 = 3 # 根据需要调整

# 循环遍历每一页
页码 in 范围(1, num_pages_to_scrape + 1):

# 获取 HTML 内容
html_content = fetch_html_with_pagination(base_url, page_number)

# 抓取 Trulia 列表
trulia_listings = scrape_trulia_listings(html_content)

# 检查 trulia_listings 是否为空
if 不能 trulia_清单:
打印(f“无法抓取页面的 Trulia 列表 {页码}.")
继续

trulia_列表 in trulia_清单:

# 抓取个人详细信息
价格 = scrape_trulia_price(trulia_listing)
地址 = scrape_trulia_address(trulia_listing)
大小 = scrape_trulia_property_size(trulia_listing)
卧室 = scrape_trulia_property_bedrooms_count(trulia_listing)
浴场 = scrape_trulia_property_baths_count(trulia_listing)
代理 = scrape_trulia_property_agent(trulia_listing)
图像 = scrape_trulia_images(trulia_listing)
链接 = scrape_trulia_property_page_link(trulia_listing)

# 将结果添加到列表中
结果字典 = {
“房产价格”: 价格,
“房产地址”: 地址,
“财产规模”: 尺寸,
“卧室数”: 卧室,
《洗澡计数》: 洗澡,
“房产经纪人”: 代理人,
“财产图片”: 图片,
“财产链接”: 关联
}
scraped_results.append(result_dict)

# 将抓取的数据保存到Excel
save_to_excel(scraped_results, 'trulia_scraped_data.xlsx')

trulia_scraped_data.xlsx 快照:

trulia_scraped_data.xlsx 快照

该集成脚本现在可以无缝处理分页,并将抓取的 Trulia 数据保存到 Excel 文件中。快乐的抓取和数据处理!

16. 最后的想法

抓取 Trulia 的房地产数据需要简单性和有效性的战略结合。虽然传统方法有其优点,但集成 Crawlbase 抓取 API 可以提高您的抓取工作。告别常见的挑战,并欢迎使用适用于 Trulia 抓取的 Crawlbase 爬行 API 的无缝、可靠且可扩展的解决方案。

对于那些渴望拓宽视野并探索从各种平台抓取数据的人来说,我们富有洞察力的指南等待着您的探索:

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

如果您遇到障碍或寻求指导,我们的 敬业的团队 当您浏览房地产数据的动态领域时,我们随时准备为您提供帮助。

17. 常见问题 (FAQ)

虽然网络抓取的合法性可能有所不同,但审查 Trulia 的服务条款以确保合规性非常重要。 Trulia 可能有关于从其平台提取数据的具体准则。建议尊重网站条款和政策,获得必要的权限,并负责任地使用网络抓取。

问:为什么要刮掉 Trulia?

抓取 Trulia 提供了有价值的房地产数据,可用于各种目的,例如市场分析、房地产趋势和竞争洞察。从 Trulia 中提取数据使用户能够收集有关房产列表、价格和便利设施的全面信息,帮助买家、卖家和房地产专业人士做出明智的决策。

为什么要刮trulia

问:您可以从 Trulia 中获取什么?

Trulia 提供丰富的房地产信息来源,可以抓取房产详细信息、列表描述、地址、定价数据等。此外,还可以提取与属性相关的用户评论、评级和图像。 Trulia 抓取的多功能性允许用户根据特定需求定制数据提取。

你能从trulia中刮到什么

问:刮取 Trulia 的最佳方法是什么?

抓取 Trulia 的最佳方法是利用专用 API IP轮换 像 Crawlbase Crawling API 一样,用于高效可靠的数据提取。通过使用信誉良好的抓取服务,您可以确保更顺畅地处理动态内容、有效分页并遵守道德抓取实践。将 Python 库与 Crawlbase 服务结合起来可以增强抓取过程。