返回博客
用例
Robert MunceanuLast updated on Mar 31, 20261 min read

《房地产数据网络爬虫全攻略》

《房地产数据网络爬虫全攻略》

房地产市场在不断扩张,随之而来的是,房地产经纪人和企业都在努力寻找新的解决方案,以精准把握未来的发展趋势。虽然房地产市场通常不会在一夜之间发生剧变,但影响它的因素实在太多,单凭一个人甚至一个组织都难以全面掌握。

那么,房价是会上涨还是下跌?哪些社区需求旺盛?是否有房产只需稍加翻新就能让价值飙升?这些只是房产经纪人经常自问的几个问题。

要解答这些问题,需要海量的研究数据进行对比,而人工收集如此庞大的信息无异于徒劳无功。此时,网络爬虫便派上了用场,它能以迅雷不及掩耳之势收集并整理数据:

众所周知,网络爬虫是数据提取的强大引擎!因此,如果您想进一步了解为何要从互联网上爬取房地产数据以及如何正确操作,让我们继续共同探索。我们既准备了 DIY 解决方案,也提供了关于 WebScrapingAPI 如何实现这一目标的分步指南。

为何要抓取房地产数据

通过网络爬取,可以确保提取的房地产信息精准、可信且实时更新。这样一来,人们就能预测房地产市场是否即将暴涨,或者了解自己的房产将在哪个价格区间内竞争。

对于企业而言,网络数据具有极高价值,因为它能助力更优的决策制定、更精准的定价以及更高的利润率。然而,关键在于每条信息都需尽可能保持最新,这使得网络爬取成为不二之选。

最常被提取的房地产数据类型包括:

  • 房产类型
  • 售价
  • 地理位置
  • 面积
  • 配套设施
  • 月租金
  • 停车位
  • 房产经纪人

上述信息可能决定一家房地产中介的成败。它对沟通、策略和效率有着巨大的影响,但最大的优势在于经纪人能多深入地了解其房源和市场。之后,只需找到合适的客户即可。

让我们通过几个案例来看看网络爬虫的价值:

房地产中介

  • 决策制定:承担风险是工作的一部分,但这并不意味着必须盲目行事。买卖房产前进行调研是必不可少的,而信息越丰富,交易结果就越理想。
  • 市场预测:掌握房产买卖的时机至关重要,这能带来最佳且最盈利的结果。某些类型的房产人气飙升,而另一些则光彩褪色;某些区域蓬勃发展,另一些则停滞不前。洞悉未来趋势是企业长久经营的关键。

普通人

网络爬虫并非仅服务于企业。事实上,它之所以广受欢迎,部分原因在于个人也能轻松上手。当然,你需要具备一定的计算机科学知识,但网上有大量教程可供参考。嘿,这篇文章就是其中之一!

  • 买卖房产:在买卖房产前,你需要准确推算其价值。如果卖掉了你的童年故居,一周后却在房产网站上看到它以两倍的价格挂牌出售,那岂不是太可惜了?
  • 投资:如果你喜欢房产投资——无论是低价买入后高价卖出获利,还是单纯出租房产——强烈建议你了解何时能回本以及预期能获得多少回报。

好,关于使用场景就说到这里。现在让我们看看代码吧!

首先,假设我们正在纽约市寻找新家。我们希望购买一套至少有两间卧室、当然还得带卫生间的房产。因此,我们将从Realtor网站开始搜索,从中提取数据并进行比较,以找到最划算的房源。

从网页中提取内容的方法多种多样。本文将介绍两种方法:一种是从零开始编写自己的网页抓取程序,另一种是使用现成的工具。

首先,让我们尝试自己动手。等后续使用专业的网页抓取工具时,这段代码会派上用场。  

构建网页爬虫以提取房产数据

我选择使用Python编写,因为它在网页抓取领域非常流行。我们有一份关于使用Python提取网页数据的通用教程,建议您查看!

检查网站代码

我们需要提取的数据位于该网页的嵌套标签中。在开始抓取之前,我们需要先找到它。要做到这一点,只需右键点击该元素并选择“检查”。

此时会弹出一个“浏览器检查器”窗口,如下所示:

在这个窗口中,我们将逐步定位包含关键数据的标签和类。起初可能看起来有些令人望而生畏,但随着经验的积累,操作会越来越简单!

查找您想要提取的数据

我们可以看到,所有需要提取的内容都位于类名为“component_property-card”的<li>标签内。如果进一步深入该标签,我们会发现关于床位数和浴室数的数据分别位于“data-label”属性下,其值分别为“pc-meta-beds”和“pc-beta-baths。掌握了这一点,我们就可以开始编写代码了!

准备工作环境

如前所述,我们将使用 Python 作为编程语言,因此您需要下载并安装它。

您可以使用任何自己习惯的集成开发环境(IDE),但我推荐使用 PyCharm

创建新项目后,请使用以下库以简化工作流程:

  • Selenium:用于网页测试和自动化浏览器操作。
  • BeautifulSoup:用于解析 HTML 和 XML 文档。
  • Pandas:用于数据处理。提取的数据将以结构化格式存储。

在项目中安装这些库非常简单。只需在项目终端中输入以下命令行:python -m pip install selenium beautifulsoup4 pandas

编写代码

首先导入之前安装的库:

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

要从网站提取数据,我们需要配置 WebDriver 使用 Chrome 浏览器来加载页面。为此,只需指定 chromedriver 的路径即可。请注意,路径末尾必须包含可执行文件的名称,而不仅仅是路径!

driver = webdriver.Chrome('your/path/here/chromedriver')

除了卧室和卫生间的数量,我们还可以提取地址、价格,甚至房产面积。信息越全面,选择新家就越容易。

声明变量并设置待抓取网站的 URL。

prices = []
beds = []
baths = []
sizes = []
addresses = []
driver.get('https://www.realtor.com/realestateandhomes-search/New-York_NY')

我们需要从网站中提取数据,正如之前所述,这些数据位于嵌套的标签中。查找具有前述属性的标签,并将数据存储在上面声明的变量中。请记住,我们只希望保存至少有两间卧室和一间浴室的房产!

content = driver.page_source
soup = BeautifulSoup(content, features='html.parser')
for element in soup.findAll('li', attrs={'class': 'component_property-card'}):
   price = element.find('span', attrs={'data-label': 'pc-price'})
   bed = element.find('li', attrs={'data-label': 'pc-meta-beds'})
   bath = element.find('li', attrs={'data-label': 'pc-meta-baths'})
   size = element.find('li', attrs={'data-label': 'pc-meta-sqft'})
   address = element.find('div', attrs={'data-label': 'pc-address'})

   if bed and bath:
       nr_beds = bed.find('span', attrs={'data-label': 'meta-value'})
       nr_baths = bath.find('span', attrs={'data-label': 'meta-value'})

       if nr_beds and float(nr_beds.text) >= 2 and nr_baths and float(nr_baths.text) >= 1:
           beds.append(nr_beds.text)
           baths.append(nr_baths.text)

           if price and price.text:
               prices.append(price.text)
           else:
               prices.append('No display data')

           if size and size.text:
               sizes.append(size.text)
           else:
               sizes.append('No display data')

           if address and address.text:
               addresses.append(address.text)
           else:
               addresses.append('No display data')

太棒了!我们已经获取了所需的所有信息,但该将它们存储在哪里呢?这时 pandas 库就派上用场了,它能帮助我们将数据整理成 CSV 文件,以便日后使用。

df = pd.DataFrame({'Address': addresses, 'Price': prices, 'Beds': beds, 'Baths': baths, 'Sizes': sizes})
df.to_csv('listings.csv', index=False, encoding='utf-8')

运行代码后,系统将生成一个名为“listings.csv”的文件,其中就包含我们珍贵的数据!

我们成功了!我们创建了自己的网页抓取工具!现在让我们直接进入正题,看看使用抓取工具需要遵循哪些步骤,以及需要修改哪些代码行。

使用网页抓取 API

在这种情况下,我们当然会使用 WebScrapingAPI

创建免费的 WebScrapingAPI 账户

要使用 WebScrapingAPI,您需要创建一个账户。别担心,前 5000 次 API 调用是免费的,而且您无需提供任何个人数据,比如信用卡信息。成功创建账户并验证邮箱后,我们就可以进入下一步了。

API密钥

要使用 WebScrapingAPI,您需要通过私有 API 密钥进行身份验证,该密钥可在您的账户仪表盘中找到。请注意,您绝不能将此密钥分享给任何人;若怀疑密钥已泄露,您可以随时点击“重置 API 密钥”按钮进行重置。

修改代码

太好了!既然您已获得 API 密钥,让我们进行必要的修改。

我们将不再使用 WebDriver。取而代之的是,‘requests’ 库将向 WebScrapingAPI 发送请求,并获取网站的 HTML 代码作为响应。

import requests
from bs4 import BeautifulSoup
import pandas as pd

接下来,我们需要为请求准备几个参数:我们要从中提取数据的网站 URL(realtor)以及我们的 API 密钥。

url = "https://api.webscrapingapi.com/v1"
params = {
 "api_key": "XXXXXXX",
 "url": "https://www.realtor.com/realestateandhomes-search/New-York_NY"
}
response = requests.request("GET", url, params=params)

别忘了更改 BeautifulSoup 解析的内容来源。我们将不再使用 Chromedriver 获取的源代码,而是使用从 API 接收到的响应。

content = response.text

从这一刻起,您可以沿用前一场景中的代码。数据仍将存储在名为“listings.csv”的 CSV 文件中。

大功告成!

基本上就是这样;您可以运行代码了。WebScrapingAPI 会完成这项工作,您将获得寻找理想住宅所需的必要数据。但您可能会问自己:“使用 WebScrapingAPI 与我们自己构建的爬虫有什么区别?”。好吧,请允许我解释一下。

自建与现成工具

使用 WebScrapingAPI 的最大优势之一在于其代理服务。该服务拥有庞大的轮换代理池,可确保用户在浏览网页时的匿名性。

当需要大规模抓取网站时,这一功能同样至关重要。若在短时间内向同一网站发起大量请求,您的 IP 地址极易被封禁,系统会将其误判为恶意攻击或带有不良意图的机器人。

使用轮换代理池会让网站误以为是多个用户在与其交互,从而使您不被察觉,并能全天候进行抓取。

在网页抓取过程中,您可能会遇到更多障碍,例如验证码或浏览器指纹识别。正如您所料,我们开发 WebScrapingAPI 正是为了绕过所有这些障碍,让您尽可能轻松地提取数据。如果您想进一步了解这一主题,请查阅我们关于网页抓取工具最常见问题的文章。

一款工具,多种应用场景

我们都认同,网络爬虫是房地产行业的绝佳解决方案,但您也可以将其用于其他目的。以下仅举几例:监控竞争对手、比较产品价格以及训练机器学习算法。

我本可以继续列举,但这已然是另一个话题了。为了不让本文冗长,建议您阅读这篇关于网页抓取工具七大应用场景的文章

利用业余时间开发网络爬虫工具听起来很不错,但需要考虑的因素很多,这些因素会消耗大量开发时间。您可以在这里找到关于“自建”与“现成”网络爬虫工具的深入讨论。

如果只是抓取几个网页,自己动手开发确实是快速解决方案。但专业任务需要专业工具,理想选择是 WebScrapingAPI 这样的 API。我提过免费试用吗?

关于作者
Robert Munceanu, 全栈开发工程师 @ WebScrapingAPI
Robert Munceanu全栈开发工程师

罗伯特·蒙塞阿努(Robert Munceanu)是 WebScrapingAPI 的全栈开发工程师,他在产品各领域均有贡献,并协助构建了支持该平台的可靠工具和功能。

开始构建

准备好扩展您的数据收集规模了吗?

加入2,000多家企业,使用WebScrapingAPI在无需任何基础设施开销的情况下,以企业级规模提取网络数据。