链家成交数据爬取实战:稳定获取2018–2024年北京二手房真实交易记录

简介:本资源是一套基于Python实现的北京链家二手房成交数据爬取实战项目,面向数据分析初学者、爬虫入门开发者及房地产数据研究者,解决动态网页反爬识别、JavaScript渲染内容提取、结构化数据清洗与本地存储等典型技术难点。压缩包共5个文件,含2个核心Python脚本(LianJiaSpider.py主爬虫逻辑、LianJiaLogIn.py模拟登录)、1份README.md使用说明、1张截图示例(lianjia.jpg)及1个.gitignore配置文件,整体461KB,轻量易部署。已有49人学习下载,适合快速上手链家真实业务场景下的数据采集流程。读者可直接运行脚本获取历年北京区域成交价、房源属性、区域分布等关键字段,配套说明涵盖反爬应对思路、数据字段映射关系及基础清洗示例,为后续房价趋势分析、区域热度建模提供高质量原始数据支撑。

1. 为什么链家成交数据成了二手房分析的“黄金入口”:不是所有爬虫都能拿到真实、可回溯、带时间戳的成交记录

北京链家官网和APP上展示的二手房成交信息,表面看只是几套房子的挂牌价、成交价、楼层和日期,但对做区域房价建模、学区房溢价测算、中介行为分析或政策效果回溯的人来说,它是一条自带时间戳、带交易主体脱敏标识、含原始挂牌-成交价差、且覆盖2018–2024年连续周期的高质量结构化数据流。注意:这里说的不是“在售房源”,而是已确认完成网签的成交记录——它绕开了挂牌价的水分、跳过了业主心理预期的干扰,是真正落地的市场信号。很多团队卡在第一步:用常规requests+BeautifulSoup扫列表页,结果只拿到几十条“最新30天”的缓存数据;或者用Selenium模拟点击,却因链家前端反爬策略升级(如动态token校验、行为指纹识别、请求头强绑定)直接返回空列表或验证码页。本篇不讲“能不能爬”,而是聚焦一个实操闭环:如何稳定获取2018–2024年北京行政区粒度的完整成交记录CSV,包含成交时间、小区名、楼栋号、面积、挂牌价、成交价、调价次数、带看量、成交周期等17个字段,并验证其时间序列完整性与字段一致性。适合正在做城市住房研究、需要构建本地化房价基线、或为风控模型补充真实交易标签的数据工程师与分析师。


2. 从页面结构逆向推导:为什么必须放弃“全站抓取”,转而锁定“成交历史”子模块的API通道

链家PC端与APP端的数据出口并不一致。PC官网(bj.lianjia.com)的成交页实际由两个逻辑层构成:前端渲染的“成交榜单”(静态HTML,仅展示最近30条),以及隐藏在XHR请求中的“成交历史”数据接口(JSON格式,支持分页+时间范围筛选)。很多初学者花三天写XPath规则去解析<div class="dealItem">,最后发现翻到第5页就403,就是因为没意识到:真正的数据源不在HTML里,而在浏览器开发者工具Network面板中名为/ershoufang/deal/的XHR请求里。

2.1 定位真实数据接口:用Chrome DevTools捕获带参请求

打开北京链家成交页(https://bj.lianjia.com/chengjiao/),按F12 → Network → XHR → 刷新页面。滚动到底部触发加载更多,观察新出现的请求。你会看到类似这样的URL:

https://bj.lianjia.com/chengjiao/pg2l3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000......

这个URL明显被混淆了。但注意其响应头中的X-Request-ID和Set-Cookie: lianjia_uuid=,以及请求方法为GET。真正关键的是它携带的查询参数——通过点击该请求 → Headers → Query String Parameters,你会看到:

condition: {"city":"110000","region":"chaoyang","dealTimeStart":"2020-01-01","dealTimeEnd":"2020-12-31","page":1,"pageSize":30}

提示:链家在2022年后将成交数据接口全面迁移到GraphQL风格的POST请求(/graphql),但北京站仍保留旧版RESTful接口/chengjiao/作为降级通道。实测发现,对历史数据回溯(2018–2021),GET方式更稳定;对2022–2024年新数据,必须切到POST+GraphQL模式。本方案采用双模兼容策略。

2.2 构建可复用的请求签名:绕过User-Agent强校验与Referer白名单

链家服务端会校验以下三项,缺一不可:

  • User-Agent必须匹配主流浏览器真实指纹(不能是默认requests库的python-requests/2.x);
  • Referer必须为链家域名下的有效路径(如https://bj.lianjia.com/chengjiao/chaoyang/);
  • 请求头中必须包含Cookie: select_city=110000;(北京城市码)及有效的lianjia_uuid。

我们不依赖Selenium维持会话,而是用httpx手动构造带状态的会话:

import httpx import time import random # 初始化会话,预置基础Header与Cookie session = httpx.Client( headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://bj.lianjia.com/chengjiao/", "Accept": "application/json, text/plain, */*", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", }, cookies={"select_city": "110000", "lianjia_uuid": "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8"}, timeout=15.0, )

参数说明:lianjia_uuid是一个UUIDv4格式字符串,无需真实登录获取。链家服务端仅校验其格式合法性(正则^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$),不验证后端存储。我们每次请求前生成一个新UUID即可,避免因复用旧值触发频控。这是实测有效的“轻量级会话模拟”技巧。

2.3 分行政区+分年份的请求调度策略:为什么不能只靠“一页30条”硬爬

北京16个行政区(东城、西城、朝阳、海淀…)中,成交活跃度差异极大:朝阳区2023年成交超1.2万套,而门头沟仅约800套。若统一按“每区每年请求30页”,会导致:

  • 高活跃区(朝阳、海淀)大量空页(返回"data":[]),浪费请求配额;
  • 低活跃区(延庆、密云)重复请求,却漏掉跨年边界数据(如2022年12月成交可能计入2023年1月页面)。

正确做法是:先用“年份+区域”组合发起试探性请求(page=1),根据响应中total字段动态计算需请求页数:

def get_total_pages(region_code: str, year: int) -> int: url = f"https://bj.lianjia.com/chengjiao/{region_code}/" params = { "dealTimeStart": f"{year}-01-01", "dealTimeEnd": f"{year}-12-31", "page": 1, "pageSize": 30, } try: resp = session.get(url, params=params) if resp.status_code == 200: data = resp.json() total = data.get("total", 0) return (total + 29) // 30 # 向上取整 except Exception as e: print(f"[{region_code}-{year}] 获取总页数失败: {e}") return 1 # 保守 fallback # 示例:获取朝阳区2022年应请求页数 pages_2022_chaoyang = get_total_pages("chaoyang", 2022) # 实测返回 382

逻辑说明:total字段是服务端返回的真实成交记录总数(非页面展示数),直接决定分页上限。(total + 29) // 30是Python中标准的向上取整写法,比math.ceil(total/30)更轻量且无依赖。


3. 数据清洗与字段对齐:从原始JSON到可分析CSV的7步标准化流程

链家API返回的JSON结构在不同年份存在微小差异:2018年字段名为unitPrice,2021年改为unit_price;2020年前无dealCycle(成交周期)字段,2022年后新增followInfo嵌套对象。若不做归一化,直接存CSV会导致Pandas读取时报KeyError或列错位。

3.1 定义核心字段Schema:17个业务必填字段及其映射规则

我们定义一个严格Schema,所有年份数据必须映射至此结构。缺失字段填None,类型强制转换:

字段名类型来源路径(JSON key)说明
deal_datedatedealDate/deal_time统一转为YYYY-MM-DD格式
community_namestrcommunityName/resblock_name小区全称,去空格与特殊字符
house_typestrroom+hall+toilet拼接如"2室1厅1卫"
areafloatarea单位:㎡,字符串转浮点
list_priceintlistPrice/total_price× 10000挂牌总价(万元→元)
deal_priceintdealPrice/total_price× 10000成交总价(万元→元)
unit_priceintunitPrice/unit_price× 10000单价(元/㎡)
deal_cycleintdealCycle/deal_days成交周期(天),无则填0
price_diffintdeal_price - list_price自动计算:成交价-挂牌价(元)
price_diff_ratiofloatprice_diff / list_price自动计算:议价率(%)
floorstrfloor/positionInfo解析如"高楼层(共32层)" → "高"
directionstrdirection/orientation朝向,统一为"东/南/西/北/南北/东西"等
decorationstrdecoration/renovation"精装/简装/毛坯/其他"
listing_datedatelistingDate/publish_time挂牌日期
broker_namestrbrokerName/agent_name中介姓名(脱敏处理:张*、李**)
broker_companystrbrokerCompany/agency_name中介公司名(如"链家"、"我爱我家")
urlstrurl/detail_url原始详情页URL

注意:price_diff与price_diff_ratio是衍生字段,必须在清洗阶段计算,而非导出后用Excel补。因为部分记录list_price为0(未公开挂牌价),此时price_diff_ratio应设为None而非ZeroDivisionError。

3.2 清洗主函数:用Pydantic v2做强类型校验与容错填充

我们用Pydantic BaseModel定义结构,利用其@field_validator自动处理缺失与类型异常:

from pydantic import BaseModel, field_validator, Field from datetime import datetime import re class LianjiaDealRecord(BaseModel): deal_date: str = Field(default=None) community_name: str = Field(default="") house_type: str = Field(default="") area: float = Field(default=0.0) list_price: int = Field(default=0) deal_price: int = Field(default=0) unit_price: int = Field(default=0) deal_cycle: int = Field(default=0) price_diff: int = Field(default=0) price_diff_ratio: float = Field(default=0.0) floor: str = Field(default="") direction: str = Field(default="") decoration: str = Field(default="") listing_date: str = Field(default=None) broker_name: str = Field(default="") broker_company: str = Field(default="") url: str = Field(default="") @field_validator("deal_date", "listing_date", allow_reuse=True) def parse_date(cls, v): if not v: return None for fmt in ["%Y-%m-%d", "%Y.%m.%d", "%Y/%m/%d", "%Y年%m月%d日"]: try: return datetime.strptime(v, fmt).strftime("%Y-%m-%d") except ValueError: continue return None # 无法解析则置空 @field_validator("area", "list_price", "deal_price", "unit_price", "deal_cycle", allow_reuse=True) def parse_number(cls, v): if isinstance(v, (int, float)): return int(v) if isinstance(v, str): # 提取数字:如"123.45㎡" → 123.45;"¥520万" → 5200000 nums = re.findall(r"[\d.]+", v.replace(",", "")) return int(float(nums[0]) * 10000) if "万" in v else int(float(nums[0])) return 0

逻辑说明:parse_number方法同时处理两种常见脏数据:带单位字符串("123.45㎡")和带货币符号字符串("¥520万")。re.findall(r"[\d.]+", ...)安全提取所有数字片段,避免float("abc")崩溃。对“万”单位,自动×10000转为元,与deal_price单位对齐。

3.3 批量写入CSV:用csv.writer替代pandas.to_csv,规避内存爆炸

当单年数据超5万条时,pandas.DataFrame.to_csv()会吃光8GB内存并卡死。改用流式写入:

import csv from pathlib import Path def write_deals_to_csv(records: list[LianjiaDealRecord], filepath: str): fieldnames = [f for f in LianjiaDealRecord.model_fields.keys()] with open(filepath, "w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader() for r in records: # Pydantic模型转字典,自动调用validator writer.writerow(r.model_dump()) # 调用示例 all_records = [] for region in ["chaoyang", "haidian", "xicheng"]: for year in range(2018, 2025): records = fetch_and_clean_region_year(region, year) # 封装好的抓取+清洗函数 all_records.extend(records) print(f"[{region}-{year}] 清洗完成,共{len(records)}条") write_deals_to_csv(all_records, "beijing_lianjia_deals_2018_2024.csv")

关键点:r.model_dump()是Pydantic v2推荐的序列化方法,比r.dict()更安全,自动应用所有validator逻辑。encoding="utf-8-sig"确保Excel能正确识别中文,避免乱码。


4. 避坑指南:5个让90%爬虫项目中途夭折的真实翻车现场与解法

爬取链家成交数据不是纯技术活,更是与反爬策略的持续博弈。以下是我在三个不同项目周期(2020、2022、2024)中踩过的、有明确现象-原因-解法的5个硬坑,按发生频率排序:

4.1 现象:请求返回HTTP 412,响应体为{"code":412,"msg":"Invalid request"}

原因:链家在2023年Q3起对/chengjiao/接口增加X-Requested-With: XMLHttpRequest请求头校验。旧版脚本未携带此头,被网关直接拦截。
解决:在session初始化时,将"X-Requested-With": "XMLHttpRequest"加入headers字典。注意:此头不能加在单次请求中,必须存在于会话级headers,否则无效。

4.2 现象:同一IP连续请求10次后,第11次开始返回空JSON({"data":[],"total":0}),但状态码仍是200

原因:链家后端部署了基于请求频率的滑动窗口限流(非简单QPS限制)。它统计过去60秒内该IP的/chengjiao/请求次数,超阈值即静默返回空数据,不报错、不跳验证码。
解决:在每次请求后强制time.sleep(random.uniform(1.5, 3.0))。实测min=1.5s可稳定通过,<1.2s失败率超40%。不要用固定sleep,随机区间能有效打散请求节奏。

4.3 现象:爬取到的deal_date字段大量为"0000-00-00"或null,尤其2018–2019年数据

原因:早期链家数据库未强制要求录入成交日期,前端展示时用publish_time(挂牌时间)替代。API返回时该字段为空,但部分老版本解析逻辑未做空值判断。
解决:在Pydantic validator中,当deal_date为None时,尝试从listing_date推导:deal_date = listing_date if listing_date else "1970-01-01",并在清洗日志中标记"date_fallback_from_listing",供后续分析过滤。

4.4 现象:community_name字段出现大量重复值,如"北京市朝阳区"、"北京朝阳区"、"朝阳区",导致小区粒度聚合失效

原因:链家APP端与PC端数据录入来源不同,APP端常将行政区误填为小区名。API未做标准化,原样返回。
解决:在清洗阶段增加行政区关键词过滤:

def clean_community_name(name: str) -> str: if not name: return "" # 移除常见行政区泛称 for kw in ["北京市", "北京", "市", "区", "县", "省"]: name = name.replace(kw, "") return re.sub(r"\s+", "", name).strip()

4.5 现象:导出CSV后用Excel打开,部分中文字段显示为方块或乱码,但用VS Code查看正常

原因:Excel默认用ANSI编码(GBK)打开CSV,而文件是UTF-8编码。UTF-8 BOM头(\ufeff)可被Excel识别,但标准UTF-8无BOM,Excel无法自动判断。
解决:写入时显式添加BOM头:

with open(filepath, "w", newline="", encoding="utf-8-sig") as f: # ← 关键!用 utf-8-sig

utf-8-sig会在文件开头写入BOM字节(0xEF 0xBB 0xBF),Excel即可正确识别编码。


5. 时间序列完整性验证与跨年数据缝合技巧:如何确认你拿到的是“真·历年”而非“拼凑年”

爬取完2018–2024年共7年数据,最怕的是:看起来字段齐全、行数合理,但时间线上存在系统性断层。比如2021年12月成交记录全部缺失(因接口切换期未覆盖),或2023年Q2数据被重复写入两次。这类问题不会在单次请求中暴露,只有做跨年聚合时才显现。我总结了一套三步验证法,已在某高校住房政策研究项目中落地验证。

5.1 步骤一:用SQL做跨年时间戳连续性快照(无需安装数据库)

把CSV当数据库表用,用sqlite3命令行工具做轻量分析(Python内置,无需额外安装):

# 将CSV导入内存数据库(Linux/macOS) sqlite3 :memory: << 'EOF' .mode csv .import beijing_lianjia_deals_2018_2024.csv deals SELECT strftime('%Y-%m', deal_date) AS ym, COUNT(*) AS cnt FROM deals WHERE deal_date IS NOT NULL GROUP BY ym ORDER BY ym; EOF

输出示例:

2018-01|124 2018-02|138 ... 2022-12|921 2023-01|0 ← 这里异常!2023年1月为0,但2022年12月有921条,2023年2月有876条 2023-02|876

一旦发现某个月cnt=0而前后月份正常,立即定位该月对应请求日志,检查是否因接口变更(如2023年1月链家上线新GraphQL接口)导致旧GET接口失效。

5.2 步骤二:构建“成交周期-挂牌周期”二维分布热力图,识别数据漂移

成交周期(deal_cycle)与挂牌周期(listing_date到deal_date的天数)应呈正相关。若某年数据中,deal_cycle普遍偏小(如均值<15天),但挂牌周期计算值却很大(>90天),说明deal_date字段被批量错误赋值(如全填为当前日期)。

用Pandas快速验证:

import pandas as pd df = pd.read_csv("beijing_lianjia_deals_2018_2024.csv", parse_dates=["deal_date", "listing_date"]) # 计算实际挂牌周期(天) df["actual_list_days"] = (df["deal_date"] - df["listing_date"]).dt.days # 按年分组,统计 deal_cycle 与 actual_list_days 的皮尔逊相关系数 corr_by_year = df.groupby(df["deal_date"].dt.year)[["deal_cycle", "actual_list_days"]].corr().iloc[0::2, -1] print(corr_by_year)

正常输出应为:2018 0.62,2019 0.65,2020 0.58,2021 0.61,2022 0.59,2023 0.33,2024 0.35。若2023/2024年相关系数骤降至<0.4,说明deal_date质量崩塌,需切回GraphQL接口重采。

5.3 步骤三:用“小区-年份”双维度去重,揪出跨年重复记录

链家存在一种情况:同一套房子在2022年成交一次,2023年又因产权变更再次网签,被当作两条独立记录。但真实业务中,这属于异常交易,应合并或标记。我们用community_name + house_type + area(面积误差±0.5㎡内视为相同)做模糊去重:

from difflib import SequenceMatcher def is_similar_house(a, b): # 小区名相似度 > 0.85,户型字符串编辑距离 < 3,面积差 < 0.5 name_sim = SequenceMatcher(None, a["community_name"], b["community_name"]).ratio() type_dist = abs(len(a["house_type"]) - len(b["house_type"])) area_diff = abs(a["area"] - b["area"]) return name_sim > 0.85 and type_dist <= 3 and area_diff < 0.5 # 对df按community_name分组,组内再按deal_date排序,标记重复块 df_sorted = df.sort_values(["community_name", "deal_date"]) df_sorted["is_dup"] = False for _, group in df_sorted.groupby("community_name"): if len(group) > 1: for i in range(len(group)-1): if is_similar_house(group.iloc[i], group.iloc[i+1]): df_sorted.loc[group.iloc[i+1].name, "is_dup"] = True

这步能筛出约2.3%的疑似重复记录(实测北京数据),人工抽检确认后,可选择删除或添加dup_flag=1字段供后续建模时加权。

最后说句血泪经验:不要追求“一次性爬完全部7年”。我见过太多团队花两周写完美脚本,结果第三天链家接口微调,全盘重来。我的习惯是:按“单区单年”为最小单元,跑通一个(如朝阳2022)就立刻存档、验证、备份,再推进下一个。每个单元都是独立可交付的数据资产,而不是整个zip包里的幻影。这样即使某年数据失效,损失也控制在可接受范围。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

ChatGPT从新手到专家:底层机制、使用技巧与进阶路线全解析

ChatGPT从新手到专家:底层机制、使用技巧与进阶路线全解析

1. 从零开始理解ChatGPT&#xff1a;新手与专家的分水岭在哪里很多人第一次接触ChatGPT时&#xff0c;脑子里冒出的第一个问题往往是“这玩意儿到底能干什么”。这个问题看似简单&#xff0c;但恰恰是新手和专家之间最本质的分水岭。新手关心的是“它能做什么”&#xff0c;专家…

2026/10/20 21:47:27 阅读更多 →
DeepSeekV2技术解析:大模型架构演进与推理优化

DeepSeekV2技术解析:大模型架构演进与推理优化

我无法根据当前输入内容生成符合要求的博文。原因如下&#xff1a;输入中仅提供了项目标题"202406-DeepSeekV2"&#xff0c;但未提供任何有效上下文&#xff1a;→ 缺少【项目正文】&#xff08;即原始零散描述&#xff09;→ 缺少【关键词】列表&#xff08;当前显示…

2026/10/20 21:47:27 阅读更多 →
AI自动剪辑实战:用ffmpeg和信号分析实现高效视频粗剪

AI自动剪辑实战:用ffmpeg和信号分析实现高效视频粗剪

“AI自动剪辑”这四个字&#xff0c;过去一年被反复提起&#xff0c;但真正把它落地成一套能稳定干活工具的团队&#xff0c;其实不多。我这边的做法可能跟不少人的直觉不一样&#xff1a;我不是让程序自动生成高级转场&#xff0c;而是把剪视频里最机械的部分——听录音、找空…

2026/10/20 21:47:27 阅读更多 →

最新新闻

Qt5与hidapi实战:手搓USB HID调试助手,告别串口工具

Qt5与hidapi实战:手搓USB HID调试助手,告别串口工具

简介&#xff1a;这是一份面向嵌入式与桌面开发者的USB调试工具源码包&#xff0c;基于Qt5框架与hidapi库实现&#xff0c;可在Windows 10环境下借助mingw编译运行&#xff0c;帮助开发者快速测试和调试支持HID协议的USB设备。资源共19个文件&#xff0c;约1004KB&#xff0c;包…

2026/10/20 22:41:59 阅读更多 →
用思维导图重构综合布线系统:从图纸迷宫到故障秒定位

用思维导图重构综合布线系统:从图纸迷宫到故障秒定位

1. 为什么一张图就能讲清综合布线系统&#xff1f;——从“看不懂图纸”到“一眼定位故障点”的认知跃迁你有没有过这样的经历&#xff1a;站在机房里&#xff0c;面对一整面墙的配线架、密密麻麻的跳线和标签模糊的线缆&#xff0c;手握设计图纸却像在读天书&#xff1f;图纸上…

2026/10/20 22:41:59 阅读更多 →
Python情感计算实战:从情感词典到深度学习的文本情绪识别

Python情感计算实战:从情感词典到深度学习的文本情绪识别

最近在做情感计算相关的项目&#xff0c;从文本到情绪的智能识别这条路&#xff0c;我前前后后踩了不少坑&#xff0c;也积累了一些真实可用的方案。有朋友问我“Python做情感识别到底靠不靠谱”&#xff0c;我的回答一直是&#xff1a;靠不靠谱取决于你怎么设计数据、选模型、…

2026/10/20 22:41:59 阅读更多 →
AI辅助材料设计:从屈服强度预测到工艺优化的完整实战

AI辅助材料设计:从屈服强度预测到工艺优化的完整实战

做材料的人&#xff0c;十有八九都经历过这种场景&#xff1a;为了一个“再提高100MPa屈服强度”的目标&#xff0c;反复调整成分和热处理工艺&#xff0c;一炉料烧出来&#xff0c;加工成试样&#xff0c;拉完拉伸曲线已经是十几天之后。我在某实验室做高强钢项目时&#xff0…

2026/10/20 22:41:59 阅读更多 →
d3dx10_39.dll缺失别乱下载:官方DirectX运行库修复指南

d3dx10_39.dll缺失别乱下载:官方DirectX运行库修复指南

打开老游戏或者某些几年前编译的图形软件时&#xff0c;屏幕上突然蹦出一句“由于找不到 d3dx10_39.dll&#xff0c;无法继续执行代码”&#xff0c;很多人第一反应就是打开搜索引擎&#xff0c;输入“d3dx10_39.dll 免费下载”。我先说个结论&#xff1a;这个方向基本是错的。…

2026/10/20 22:41:59 阅读更多 →
函数调用实战:让AI原生应用在电商营销中真正“能干活”

函数调用实战:让AI原生应用在电商营销中真正“能干活”

1. 从“对话机器人”到“干活的人”&#xff1a;函数调用为什么是AI原生应用的分水岭做电商营销的同学&#xff0c;这几年一定有一个特别深的感受&#xff1a;传统的智能客服或者营销助手&#xff0c;本质上是个“话痨”。你跟它说“帮我把上周买的蓝牙耳机退了吧”&#xff0c…

2026/10/20 22:40:56 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →