新加坡房产数据抓取工具Skill sg-property-scraper

这是一个用于抓取新加坡房产租赁和销售房源信息的Python脚本工具。支持按房源类型、房产类型、价格、面积、地铁站、通勤时间等多种条件进行灵活筛选,并输出结构化JSON数据。适用于房产数据分析、市场调研、投资决策和自动化房产搜索等场景。关键词:新加坡房产、房产爬虫、房源搜索、租赁数据、销售数据、地铁站筛选、通勤时间、Python脚本、数据抓取、房产分析。

后端开发 0 次安装 12 次浏览 更新于 2/24/2026

name: sg-property-scraper description: 使用灵活筛选条件搜索新加坡房产租赁和销售房源。当被要求搜索新加坡房产、查找租赁或销售房源、检查地铁站附近的房产价格或比较通勤时间时使用。支持按房源类型(租赁/销售)、房产类型(组屋/公寓/有地住宅)、卧室数量、浴室数量、价格范围、面积、竣工年份、地铁站代码、距地铁站距离、房间类型、可用性以及到目的地的通勤时间进行筛选。将JSON输出到标准输出。 metadata: {“openclaw”:{“requires”:{“bins”:[“python3”]},“primaryEnv”:“GOOGLE_MAPS_API_KEY”}}

新加坡房产爬虫

通过HTTP请求抓取新加坡房产房源。返回结构化JSON。

脚本位置

scripts/scrape.py

相对于此SKILL目录。运行方式:

python3 <SKILL_DIR>/scripts/scrape.py [选项]

依赖项

  • Python 3.8+
  • pip install curl_cffi beautifulsoup4 lxml
  • 可选:GOOGLE_MAPS_API_KEY 环境变量用于计算通勤时间(Google Routes API)

快速开始

# 搜索环线附近月租低于4000新元的2卧公寓
python3 scripts/scrape.py \
  --listing-type rent --bedrooms 2 --max-price 4000 \
  --property-type-group N --mrt-range CC:20-24 \
  --output json

# JSON输入模式(更适合AI工具)
python3 scripts/scrape.py --json '{
  "listingType": "rent",
  "bedrooms": 2,
  "maxPrice": 4000,
  "propertyTypeGroup": ["N"],
  "mrtStations": ["CC20","CC21","CC22","CC23","CC24"]
}'

# 试运行:仅打印URL而不抓取
python3 scripts/scrape.py --dry-run --listing-type rent --bedrooms 3

筛选参数

标志 URL参数 类型 描述
--listing-type listingType 字符串 rentsale
--property-type-group propertyTypeGroup 字符串(可重复) N=公寓,L=有地住宅,H=组屋
--entire-unit-or-room entireUnitOrRoom 字符串 ent 仅限整套单位;省略则显示所有
--room-type roomType 字符串(可重复) master(主人房),common(普通房),shared(共享房)
--bedrooms bedrooms 整数 -1=房间,0=单间公寓,1-5
--bathrooms bathrooms 整数 浴室数量
--min-price minPrice 整数 最低价格(新元)
--max-price maxPrice 整数 最高价格(新元)
--min-size minSize 整数 最小面积(平方英尺)
--max-size maxSize 整数 最大面积(平方英尺)
--min-top-year minTopYear 整数 最低竣工年份
--max-top-year maxTopYear 整数 最高竣工年份
--distance-to-mrt distanceToMRT 浮点数 距地铁站最大距离(公里)(例如 0.50.75
--availability availability 整数 可用性筛选
--mrt-station mrtStations 字符串(可重复) 地铁站代码,例如 CC20
--mrt-range mrtStations 字符串(可重复) 地铁站范围,例如 CC:20-24
--sort sort 字符串 date(日期),price(价格),psf(每平方英尺价格),size(面积)
--order order 字符串 asc(升序),desc(降序)
--commute-to commuteTo 字符串 用于计算通勤时间的目的地地址(需要 GOOGLE_MAPS_API_KEY

卧室/房间逻辑

  • --entire-unit-or-room ent --bedrooms 4 = 4卧整套单位
  • --entire-unit-or-room ent --bedrooms 0 = 单间公寓
  • --bedrooms -1 --room-type master --room-type common = 房间租赁(主人房或普通房)
  • 省略 --entire-unit-or-room 以同时显示整套单位和房间

地铁站语法

  • 单个车站:--mrt-station CC20
  • 范围(同一线路):--mrt-range CC:20-24(扩展为 CC20, CC21, CC22, CC23, CC24)
  • 多条线路:使用多个标志
  • 在JSON中:"mrtStations": ["CC20", "EW15"][["CC", [20, 24]]](元组格式)

有关约213个有效地铁站代码的完整列表,请参阅 references/params.md

执行参数

标志 描述
--pages N 要抓取的页数(默认:1)
--dry-run 构建并打印URL,跳过抓取
--no-validate 跳过参数验证
--timeout N HTTP请求超时时间(秒)(默认:30)
--raw-param K=V 额外的URL查询参数(可重复)
--output json|text|none 输出格式(默认:管道传输时为json)
--verbose 详细日志输出到标准错误

JSON输入模式

使用 --json 将筛选条件作为JSON字符串传递。键使用与URL参数名称匹配的驼峰命名法:

python3 scripts/scrape.py --json '{
  "listingType": "rent",
  "propertyTypeGroup": ["N"],
  "bedrooms": 2,
  "bathrooms": 2,
  "maxPrice": 4000,
  "mrtStations": ["EW16", "EW17", "EW18"],
  "distanceToMRT": 0.75,
  "minTopYear": 1990
}'

或从文件加载:--config filters.json

输出格式

标准输出上的JSON数组(若无结果则为空 []):

[
  {
    "id": "23744236",
    "name": "Kingsford Waterbay",
    "price": "S$ 3,900 /mo",
    "psf": "S$ 4.53 psf",
    "address": "68 Upper Serangoon View",
    "bedrooms": "2",
    "bathrooms": "2",
    "area": "861 sqft",
    "type": "Condominium",
    "built": "Built: 2018",
    "availability": "Ready to Move",
    "mrt_distance": "14 min (1.15 km) from SE4 Kangkar LRT Station",
    "list_date": "Listed on Feb 15, 2026 (2d ago)",
    "agent": "May Chong",
    "agency": "PROPNEX REALTY PTE. LTD.",
    "headline": "Perfect work from home unit, river facing, unblocked high floor cozy",
    "link": "https://www.propertyguru.com.sg/listing/for-rent-kingsford-waterbay-23744236",
    "commute_driving": "25 mins",
    "commute_transit": "45 mins"
  }
]

退出代码

  • 0:成功,找到结果
  • 1:错误(参数错误,抓取失败)
  • 2:成功但未找到房源

代理使用说明

当从AI代理调用此脚本时:

  1. 使用 --output json 获取结构化输出(管道传输时默认)
  2. 使用 --json 标志比单独使用CLI标志更容易传递参数
  3. 使用 --dry-run 在抓取前预览搜索URL
  4. 如果用户需要更多结果,使用 --pages N(每页约有20个房源)
  5. 使用 --commute-to 和目的地地址计算每个房源的通勤时间(驾车+公共交通)。需要 GOOGLE_MAPS_API_KEY 环境变量。如果未设置密钥,则静默省略通勤字段。
  6. 当API密钥缺失或计算失败时,commute_drivingcommute_transit 字段为空字符串 ""