Cian Connector 用于在需要俄罗斯房地产数据时读取 Cian(cian.ru)。它通过操作员 Chrome 的 CDP 会话调用站点自身 JSON 接口:搜索端点在页面内以 POST 方式响应,房源卡片把完整状态嵌入 window._cianConfig,全程不解析 HTML。普通 HTTP 请求会被 Cian 的 WAF 依据 IP 信誉拦截(返回 403「Обнаружен подозрительный трафик」,无验证码),因此没有匿名访问层级。
用途:按筛选条件查找房源,包括交易方式(出售 / 长期租赁 / 日租)、房产类型、地区、房间数、价格区间和总面积;查询单个房源的价格、价格历史、户型、楼栋、地址、地铁、描述和发布者。该技能仅面向房地产;商品请使用 marketplace 连接器,跨店比价请使用 compare_prices,Cian 不参与其中。
主要能力:cian_search(deal, offer_type="flat", region=None, rooms=None, price_min=None, price_max=None, area_min=None, area_max=None, page=1) 通过 search-offers-desktop 返回房源,每页 28 条。deal 取 sale、rent(长期)或 daily(посуточно);offer_type 取 flat、room、house 或 commercial。未标明价格的房源 price_rub 为 None 而非 0,price_unit 说明价格单位。cian_card(offer_id_or_url) 返回单个房源的价格、price_history、房间、面积、楼层、楼栋、地址、metro[]、描述、浏览量和 agent。cian_selfcheck() 不是 MCP 工具,而是三态漂移检测,仅限 CLI;marketplace-mcp doctor 会一次运行所有连接器的检测。
地区与筛选:地区使用 Cian 的数字 ID,连接器仅内置四个已验证区域——1 莫斯科、2 圣彼得堡、4593 莫斯科州、4588 列宁格勒州;其他 ID 需从 cian.ru 搜索 URL 的 region= 获取,不要猜测,错误 ID 会返回其他地区且价格看似正确的房源。默认地区为 CIAN_REGION(1,莫斯科)。搜索不支持文本查询,「двушка у метро Сокол」需转换为 rooms=[2] 加地区和价格区间;地铁与街道筛选未暴露,需自行按地址或地铁过滤返回结果。rooms 仅适用于公寓,取值 1–6,另有 Cian 编码 7(自由布局)和 9(单间公寓 studio);offer_type="room" 会以 Cian 的房间编码 0 按公寓方式搜索,此时调用方的 rooms 被忽略。price_min / price_max 单位为卢布,具体含义随交易方式而定:出售为总价,租赁为每月,日租为每晚。total_count 为 Cian 的 aggregatedCount,即站点展示的去重数量,通常低于原始 offerCount。
长期租赁与日租:在 Cian 上是两个独立市场,连接器也保持分离(for_day "!1" 与 "1"),不会混在同一页。日租价格按晚计,price_unit 为 "day",类别返回 dailyFlatRent / dailyRoomRent / dailyHouseRent;此时 Cian 的 price_period 和 lease_term 为 null,只能依据 price_unit,不可将 5 000 ₽ 每晚与 90 000 ₽ 每月直接比较。日租仅覆盖 flat、room 和 house,offer_type="commercial" 与 deal="daily" 组合会被拒绝为错误请求,因为上游会返回零结果,容易被误读为「今天没有空房」。约一个月的住宿可同时关注两个市场:长期租赁中 lease_term == "fewMonths",以及日租中通常在描述里协商月租折扣。
数据解读要点:价格依次读取 bargainTerms.priceRur、bargainTerms.price、priceTotalRur;新房卡片只有后两者,日租房源没有 priceRur,解析器读取全部三个,因此 null 表示 Cian 未展示价格。price_unit 由连接器计算(total、month、day),展示价格时应一并引用,且不要跨单位求平均。title 仅部分房源为 Cian 原始标题,否则使用简短信息行(如「1-комн.кв. · 12/22 этаж」)或拼合的「房间、面积、楼层」,不应视为营销名称。搜索行中的 metro 是 Cian 标记为该卡片所属的地铁站(isDefault),不是最短通勤时间;卡片按该顺序返回所有站点,并标注 walk 或 transport。category 表明市场类型:newBuildingFlatSale 为开发商一手房(agent.user_type = developer,saleType fz214),flatSale 为二手房,另有 roomSale、houseSale、officeSale 等。长期租赁行附带 price_period(monthly)、lease_term(longTerm / fewMonths)和 deposit_rub;is_by_homeowner 仅在房东无中介发布时为 True,None 表示 Cian 未说明。created_at 为 Cian 本地 ISO 时间且无时区,卡片上的 updated_at 为 UTC,不要当作同一时区比较。卡片的 views 从 Cian 自身文本解析(如「12907 просмотров, 98 за сегодня」),取第一个数字为总浏览量。
限制:无中介/机构工具,/agents/<id>/ 仅以页面文本呈现资料,无结构化状态,因此无工具读取;发布者姓名、类型、ID、房源数量和账号年龄随卡片 agent 字段返回。无评价数据,房地产没有按房源的评价池。无地理建议,地区和地铁均为 ID 而非名称。无电话号码,卡片只知道房源有多少电话而非具体号码。
注意事项:浏览器会话内出现 403(transport_down 且含 "WAF block")表示 Cian 质询了抓取配置,需在该 Chrome 中打开 cian.ru、按提示通过检查后重试;数据中心 IP 的冷会话可能一开始就被拦截,预热后的会话曾连续 8 次请求未出现 429。请求节奏为刻意限制:请求间隔 1.5 秒,一次一个标签页,不要循环猛刷第 1–10 页,只请求所需内容。parser_drift 表示响应封装或 _cianConfig 结构变化,连接器不会返回半解析的卡片充当数据,应运行检测后修复解析器。已下架房源可能显示为「объявление не найдено」→ not_found。自检通过仅证明传输有响应且解析器找到 ID、价格和地址,并不证明某个价格当前有效;需要时以卡片上的 price_history 作为依据。
DeepSeek Harness 激活:默认配置仅通过轻量 compare 挂载暴露 compare_prices 和 compare_sources;各 marketplace 工具和 marketplace_sources 需要设置 RU_MARKETPLACE_MCP_FULL=1 并重启配置,默认模式下不要调用。Cian 从不属于 compare 挂载,只能在完整配置下访问。