Skip to content

Repository files navigation

TradeMe 爬虫项目

抓取 TradeMe 新西兰房产数据,存储到 PostgreSQL(trademe 模式)。

环境要求

  • Python 3.8+
  • PostgreSQL 12+
pip install psycopg2-binary beautifulsoup4

配置

编辑 config.ini

[database]
host = 127.0.0.1
port = 5432
dbname = postgres
user = postgres
password = your_password

爬虫列表

1. 合租/室友列表 (trademe_flatmates_wanted.py)

项目 说明
API /v1/search/flatmates.json
表名 trademe.flatmates_wanted
每页 100 条
用途 搜索列表数据抓取
python trademe_flatmates_wanted.py

2. 住宅出售列表 (trademe_for_sale.py)

项目 说明
API /v1/search/property/residential.json
表名 trademe.for_sale
每页 100 条
用途 搜索列表数据抓取
python trademe_for_sale.py

3. 住宅出租列表 (trademe_for_rent.py)

项目 说明
API /v1/search/property/rental.json
表名 trademe.for_rent
每页 100 条
用途 搜索列表数据抓取
python trademe_for_rent.py

4. 合租详情页浏览量 (trademe_flatmates_wanted_detail.py)

抓取详情页 HTML 提取 page_views,多线程执行。

项目 说明
请求地址 https://www.trademe.co.nz/a/property/flatmates-wanted/listing/{listing_id}
表名 trademe.flatmates_wanted
更新字段 page_views BIGINT
解析方式 BeautifulSoup div.tm-property-listing__listing-metadata-page-views
并发 5 线程
python trademe_flatmates_wanted_detail.py

5. 出租详情 + 学区数据 (trademe_for_rent_detail.py)

同时抓取详情页浏览量和学校学区数据,多线程执行。

详情页

  • 地址:https://www.trademe.co.nz/a/property/residential/rent/listing/{listing_id}
  • 更新 trademe.for_rent.page_views

学区 API

  • 地址:https://api.trademe.co.nz/v1/listings/{listing_id}/schools.json
  • 写入 trademe.for_rent_school
python trademe_for_rent_detail.py

数据库表结构

trademe.flatmates_wanted

列名 类型 说明
listing_id BIGINT PK 房源 ID
title TEXT 标题
category TEXT 分类
start_price INTEGER 起拍价
start_date TIMESTAMPTZ 开始日期
end_date TIMESTAMPTZ 结束日期
is_featured BOOLEAN 是否精选
has_gallery BOOLEAN 是否有图库
as_at TIMESTAMPTZ 数据时间戳
category_path TEXT 分类路径
picture_href TEXT 缩略图 URL
region_id / region INTEGER / TEXT 大区
suburb_id / suburb INTEGER / TEXT 郊区
reserve_state INTEGER 保留价状态
is_classified BOOLEAN 是否分类广告
open_homes JSONB 开放日时间
geographic_location JSONB 经纬度坐标
price_display TEXT 价格展示文本
photo_urls JSONB 照片 URL 数组
additional_data JSONB 额外标签数据
canonical_path TEXT 规范路径
member_id INTEGER 发布者 ID
district TEXT 行政区域
available_from TEXT 可入住时间
bathrooms / bedrooms INTEGER 卫浴 / 卧室数
best_contact_time TEXT 最佳联系时间
parking TEXT 停车信息
pets_okay INTEGER 是否允许宠物
property_type TEXT 房产类型
rent_per_week NUMERIC 周租金
smokers_okay INTEGER 是否允许吸烟
whiteware TEXT 家具情况
adjacent_suburb_names JSONB 附近郊区名数组
adjacent_suburb_ids JSONB 附近郊区 ID 数组
district_id INTEGER 区域 ID
agency JSONB 中介信息
property_search_tags JSONB 搜索标签
flatmates INTEGER 室友数
current_flatmates TEXT 当前室友描述
couples_okay INTEGER 是否接受情侣
additional_costs TEXT 额外费用
page_views BIGINT 页面浏览量
created_at TIMESTAMPTZ 创建时间

trademe.for_sale

列名 类型 说明
listing_id BIGINT PK 房源 ID
title TEXT 标题
category TEXT 分类
start_price INTEGER 起拍价
start_date / end_date TIMESTAMPTZ 起止日期
is_featured / has_gallery / is_bold / is_highlighted BOOLEAN 广告标记
as_at TIMESTAMPTZ 数据时间戳
category_path / picture_href TEXT 分类路径 / 图片
region / suburb / district TEXT 地理位置
address TEXT 街道地址
area NUMERIC 室内面积 (m²)
bathrooms / bedrooms INTEGER 卫浴 / 卧室
parking / total_parking TEXT / INTEGER 停车信息
property_type TEXT 房产类型
agency JSONB 中介(含 Branding、Agents)
has_embedded_video BOOLEAN 是否有嵌入视频
listing_extras JSONB 额外标记数组
listing_group TEXT 分组
premium_package_code TEXT 高级套餐
property_sale_info JSONB 销售信息
created_at TIMESTAMPTZ 创建时间

其余共有字段与 flatmates_wanted 一致。

trademe.for_rent

for_sale 结构类似,差异字段:

列名 类型 说明
agency_reference TEXT 中介参考编号
available_from TEXT 可入住日期
best_contact_time TEXT 最佳联系时间
max_tenants INTEGER 最大租客数
pets_okay INTEGER 宠物策略
rent_per_week NUMERIC 周租金
smokers_okay INTEGER 吸烟策略
whiteware TEXT 家具情况
page_views BIGINT 页面浏览量

trademe.for_rent_school

学区数据,复合主键 (listing_id, school_id)

列名 类型 说明
listing_id BIGINT 房源 ID
school_id INTEGER 学校 ID
name TEXT 学校名称
location JSONB 经纬度 {Latitude, Longitude}
street_address TEXT 街道地址
suburb TEXT 郊区
city_district TEXT 城市区域
post_code TEXT 邮编
institution_type TEXT 学校类型(Primary / Intermediate / Secondary)
authority TEXT 公立/私立
school_roll INTEGER 学生人数
gender INTEGER 性别类型
gender_description TEXT 性别描述
age_groups JSONB 年级组数组
zones JSONB 学区边界多边形
distance_from_property INTEGER 距房源距离 (m)
zoning_calculated BOOLEAN 是否已计算学区
created_at TIMESTAMPTZ 创建时间

通用特性

  • Gzip 解压:自动处理响应压缩
  • 重试机制:网络异常自动重试 3 次(指数退避)
  • 增量更新ON CONFLICT ... DO UPDATE 避免重复
  • 多线程:详情爬虫使用 5 线程并发
  • 断点续爬:只处理 page_views IS NULL 的记录

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages