Trulia 是一个受欢迎的房地产网站,提供了大量信息,可以通过抓取这些信息来收集见解和趋势。 Trulia 提供大量房地产数据,包括房产列表、价格和市场趋势。 Trulia 凭借其用户友好的界面和全面的数据,成为购房者和房地产专业人士的首选目的地。
在 46.5 年 2024 月访问量达到 XNUMX 万次随着数百万用户每月积极寻找房屋、公寓和租金,Trulia 是提取和分析有价值数据的主要目标。 Trulia 是一个房地产巨头,拥有数百万条房产记录,使其成为市场分析和研究的金矿。
对于希望分析市场动态、识别投资机会或跟踪房地产价格的房地产专业人士、投资者或研究人员来说,抓取 Trulia 特别有用。通过网络抓取,您可以有效地收集最新信息并获得竞争优势。
在本分步指南中,我们将引导您完成使用 Python 语言抓取 Trulia 的整个过程。那么,让我们开始吧!
目录
- 了解项目范围
- 先决条件
- 项目设置
- 提取 Trulia SERP HTML
- 使用通用方法提取 HTML
- 使用通用方法抓取 Trulia 时面临的挑战
- 使用 Crawlbase 提取 HTML Crawling API
- 抓取 Trulia SERP 列表
- 刮Trulia价格
- 抓取 Trulia 地址
- 刮取 Trulia 财产规模
- 刮取 Trulia 房产卧室数量
- 刮取 Trulia 房产浴场数量
- 刮取 Trulia 房地产经纪人
- 抓取 Trulia 图片
- 抓取 Trulia 属性页链接
- 完整的代码
- 处理分页和保存数据
- 处理分页
- 将抓取的数据保存到 Excel 文件中
- 将分页和保存操作集成到脚本中
- 总结
- 常见问题解答(FAQ)
- 刮取 Trulia 合法吗?
- 为什么要刮Trulia?
- 您可以从 Trulia 中获取什么?
- 刮 Trulia 的最佳方法是什么?
1. 了解项目范围
在本指南中,我们的目标是创建一个用户友好的教程,使用 Python 和 Crawlbase 来抓取 Trulia Crawling API该项目涉及利用基本工具,例如用于 HTML 解析的 Python BeautifulSoup 库和 Crawlbase Crawling API 以实现高效的数据提取过程。
我们将专注于从 Trulia 列表中抓取各种元素,包括 属性名称、地址、评级、评论和图像。目的是提供一种循序渐进的方法,使具有不同技术专业水平的用户可以使用它。
该项目的关键组成部分:
- HTML抓取:我们将使用 Python 和 Crawlbase Crawling API 检索 Trulia 列表的完整 HTML 内容。这可确保有效提取数据,同时遵守 Trulia 的使用政策。将提供此项目的目标 URL 以供亲身体验。
我们将从该 URL 中抓取位置“加利福尼亚州洛杉矶”的 Trulia 房产列表。
- 从 Trulia 中提取数据:我们的主要重点是使用 Python 中的 BeautifulSoup 从 Trulia 列表中提取特定的数据元素。这包括抓取属性名称、地址、评级、评论和图像。
- 处理分页:为了涵盖 Trulia 列表的多个页面,我们将讨论处理分页的技术,以确保捕获所有相关数据。
- 保存数据:我们将探索存储或保存抓取数据的方法,提供保存到 CSV 文件以供进一步分析等选项。
通过概述项目范围,我们的目标是指导您完成全面的 Trulia 抓取教程,使该过程易于理解和实现。现在,让我们继续讨论该项目的先决条件。
2。 先决条件
在沉浸在使用 Python 进行网络抓取 Trulia 的世界之前,让我们先确定确保旅程顺利的基本先决条件:
- Python基础知识:
对 Python 编程语言有基本的了解至关重要。如果 Python 对您来说是新手,请考虑探索介绍性的 教程 或课程来掌握基础知识。
- 具有 API 凭据的 Crawlbase 帐户:
获取 Crawlbase 上的活动帐户以及 API 凭据,以便以编程方式访问 Trulia 页面。 立即注册 用于 Crawlbase Crawling API 接收您的初始 1,000 个请求,并保护您的 API 凭证免受 账户文件.
- 选择代币:
Crawlbase 提供两种类型的令牌 - 一种是为静态网站量身定制的,另一种是为动态或 JavaScript 驱动的网站设计的。 Trulia 使用 JS 渲染来加载网站上的数据。所以,我们使用 JS 令牌。
- Python 安装在你的机器上:
你可以从官方下载Python Python网站 基于您的操作系统。此外,确认 pip(Python 包管理器)的存在,它通常与 Python 安装捆绑在一起。
1 2 3 4 5
| python --version
点 - 翻译
|
3. 项目设置
在我们深入抓取 trulia.com 之前,让我们先设置我们的项目以确保我们拥有所需的一切。
安装依赖关系
现在,让我们通过安装必要的库来准备我们的工具。这些库就像超级英雄一样,将帮助我们毫不费力地抓取 Trulia。请按照以下简单步骤操作:
- 打开终端或命令提示符:
根据您的操作系统,打开终端或命令提示符。
- 安装
requests
:
requests 库帮助我们轻松发出 HTTP 请求。输入以下命令并按 Enter:
- 安装
beautifulsoup4
:
BeautifulSoup 有助于 HTML 解析,使我们能够无缝导航和提取数据。使用以下命令来安装它:
- 安装
pandas
:
Pandas 是我们的数据处理动力源,可以有效处理抓取的数据。运行以下命令来安装它:
- 安装爬网库:
Crawlbase 库与 Crawlbase 集成 Crawling API,简化我们的网页抓取流程。使用以下命令安装 Crawlbase 库:
选择 IDE
现在 Python 和基本库已准备就绪,让我们选择一个集成开发环境 (IDE),让我们的编码体验变得简单而愉快。有多种 IDE 可供使用,以下是一些用户友好的 Python 选项:
在接下来的部分中,我们将首先从 trulia.com 上的单个属性中提取数据。让我们开始刮痧之旅吧!
在抓取 Trulia 数据时,我们的第一步是检索搜索引擎结果页面 (SERP) 的原始 HTML 内容。这为提取有价值的信息奠定了基础。让我们探索两种方法:常用方法和使用 Crawlbase 的智能方法 Crawling API.
使用通用方法提取 HTML
当涉及到提取 HTML 时,常见的方法涉及使用 Python 库,例如 requests
和 BeautifulSoup
。这些库允许我们向 Trulia 网站发送请求,然后解析接收到的 HTML 数据。
1 2 3 4 5 6 7 8 9 10
| 进口 要求
trulia_serp_url = “https://www.trulia.com/CA/Los_Angeles/”
响应 = requests.get(trulia_serp_url)
打印(响应.文本)
|
运行脚本:
打开终端或命令提示符并导航到保存 trulia_scraper.py 的目录。使用以下命令执行脚本:
1
| python trulia_scraper.py
|
当您按下 Enter 键时,您的脚本就会生效,向 Trulia 网站发送请求,检索 HTML 内容并将其显示在您的终端上。
使用通用方法抓取 Trulia 时面临的挑战
当我们在抓取 Trulia 的道路上前进时,我们在依赖常见或传统方法时遇到了某些挑战。让我们来了解一下这些障碍:
- 防刮措施
Trulia 实施保护措施来保护其网站免遭自动抓取。这些措施通常包括验证码和速率限制,这使得传统的抓取方法很难顺利地收集数据。
相关阅读: 如何绕过验证码
- 动态内容
Trulia 的网站广泛利用 JavaScript 来加载动态内容。传统的抓取可能难以有效地捕获这些动态数据,从而导致信息检索不完整或不准确。
这些挑战凸显了对更复杂方法的需求,我们将使用增强的功能来解决这个问题 爬虫库 Crawling API 在后续部分中。
爬行基地 Crawling API 提供更强大的解决方案,克服常见的抓取挑战。它允许高效地提取 HTML、处理动态内容并确保遵守 Trulia 的使用政策。其 参数 让我们能够毫不费力地处理各种抓取任务。
我们将纳入 ajax_wait
和 page_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
爬行 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 获取所有属性列表。这将作为提取个人详细信息的基础。
每个清单都在里面 li
元素和所有 li
元素在里面 ul
元素与 data-testid
as search-result-list-container
.
1 2 3 4 5 6 7 8 9 10 11 12
| 在 bs4 进口 美丽汤
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价格
让我们创建一个函数来从搜索结果中抓取房地产价格。
当您检查价格时,您会看到它包含在 div
上课 data-testid
as property-price
.
1 2 3 4 5 6 7 8 9
| DEF scrape_trulia_价格(清单): 尝试: 价格元素 = 列表.select_one('div[data-testid="房产价格"]') property_price = Price_element.text.strip() if 价格元素 其他 没有 回报 房产价格 除 特殊课程 as e: 打印(f“抓取 Trulia 价格时发生错误: {STR(e)}") 回报 没有
|
7. 抓取 Trulia 地址
现在,让我们获取属性地址。
地址附在 div
上课 data-testid
as property-address
.
1 2 3 4 5 6 7 8 9
| DEF scrape_trulia_地址(清单): 尝试: 地址元素 = 列表.select_one('div[data-testid="属性地址"]') property_address = address_element.text.strip() if 地址元素 其他 没有 回报 属性地址 除 特殊课程 as e: 打印(f“抓取 Trulia 地址时发生错误: {STR(e)}") 回报 没有
|
8. 刮取 Trulia 财产规模
接下来是提取属性大小。
属性大小包含在 div
上课 data-testid
as property-floorSpace
.
1 2 3 4 5 6 7 8 9
| 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
| 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
| 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 房地产经纪人
现在,让我们了解一下房产中介的信息。
房地产经纪人信息可以在 div
具有属性 data-testid
有价值 property-card-listing-summary
.
1 2 3 4 5 6 7 8 9
| 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 图片
捕捉房产图像至关重要。这是一个获取这些的函数。
所有图像都存在于 div
全班同学都盯着 SwipeableContainer__Container
。一旦我们获得了元素,我们就可以抓取所有的元素 img
element src
属性来获取图像链接。
13. 抓取 Trulia 属性页链接
现在,让我们获取属性详细信息页面链接。
属性页链接可以在 a
具有属性的元素 data-testid
有价值 property-card-link
.
1 2 3 4 5 6 7 8 9
| 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
爬行 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']}") 回报 没有
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)}") 回报 没有
DEF scrape_trulia_价格(清单): 尝试: 价格元素 = 列表.select_one('div[data-testid="房产价格"]') property_price = Price_element.text.strip() if 价格元素 其他 没有 回报 房产价格 除 特殊课程 as e: 打印(f“抓取 Trulia 价格时发生错误: {STR(e)}") 回报 没有
DEF scrape_trulia_地址(清单): 尝试: 地址元素 = 列表.select_one('div[data-testid="属性地址"]') property_address = address_element.text.strip() if 地址元素 其他 没有 回报 属性地址 除 特殊课程 as e: 打印(f“抓取 Trulia 地址时发生错误: {STR(e)}") 回报 没有
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)}") 回报 没有
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)}") 回报 没有
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)}") 回报 没有
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)}") 回报 没有
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)}") 回报 没有
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 = “https://www.trulia.com/CA/Los_Angeles/”
抓取结果 = []
html_content = make_crawlbase_request(trulia_serp_url)
trulia_listings = scrape_trulia_listings(html_content)
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 使用特定的基于路径的方法,为每个页面分配一个序列号。例如,第一页的路径为 /1_p/
,第二页使用 /2_p/
,等等。
下面是一个处理分页并获取给定页面的 HTML 内容的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13
| DEF fetch_html_with_pagination(基本网址、页码): 尝试: 页面网址 = f"{base_url}/{页码}_p/”
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'): 尝试: df = pd.DataFrame(数据) 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 主(): 基本网址 = “https://www.trulia.com/CA/Los_Angeles”
抓取结果 = []
要抓取的页数 = 3
页码 in 范围(1, num_pages_to_scrape + 1):
html_content = fetch_html_with_pagination(base_url, page_number)
trulia_listings = scrape_trulia_listings(html_content)
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)
save_to_excel(scraped_results, 'trulia_scraped_data.xlsx')
|
trulia_scraped_data.xlsx
快照:
该集成脚本现在可以无缝处理分页,并将抓取的 Trulia 数据保存到 Excel 文件中。快乐的抓取和数据处理!
16. 最后的想法
爬取 Trulia 的房地产数据需要简单性和有效性的战略结合。虽然传统方法有其优点,但整合 Crawlbase Crawling API 提升您的抓取工作。告别常见挑战,使用 Crawlbase 获得无缝、可靠且可扩展的解决方案 Crawling API 用于 Trulia 抓取。
对于那些渴望拓宽视野并探索从各种平台抓取数据的人来说,我们富有洞察力的指南等待着您的探索:
📜 如何刮 Zillow
📜 如何抓取 Airbnb
📜 如何抓取 Booking.com
📜 如何抓取 Expedia
如果您遇到障碍或寻求指导,我们的 敬业的团队 当您浏览房地产数据的动态领域时,我们随时准备为您提供帮助。
17. 常见问题 (FAQ)
问:刮取 Trulia 是否合法?
虽然网络抓取的合法性可能有所不同,但审查 Trulia 的服务条款以确保合规性非常重要。 Trulia 可能有关于从其平台提取数据的具体准则。建议尊重网站条款和政策,获得必要的权限,并负责任地使用网络抓取。
问:为什么要刮掉 Trulia?
抓取 Trulia 提供了有价值的房地产数据,可用于各种目的,例如市场分析、房地产趋势和竞争洞察。从 Trulia 中提取数据使用户能够收集有关房产列表、价格和便利设施的全面信息,帮助买家、卖家和房地产专业人士做出明智的决策。
问:您可以从 Trulia 中获取什么?
Trulia 提供丰富的房地产信息来源,可以抓取房产详细信息、列表描述、地址、定价数据等。此外,还可以提取与属性相关的用户评论、评级和图像。 Trulia 抓取的多功能性允许用户根据特定需求定制数据提取。
问:刮取 Trulia 的最佳方法是什么?
抓取 Trulia 的最佳方法是利用专用 API IP轮换 像 Crawlbase Crawling API 实现高效可靠的数据提取。通过使用信誉良好的抓取服务,您可以确保更顺畅地处理动态内容、有效分页并遵守道德抓取实践。将 Python 库与 Crawlbase 服务结合起来可以增强抓取过程。