新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python数据分析实战:B站数据采集清洗与可视化看板搭建

发布时间:2026/9/25 2:14:48来源:尧图网络
Python数据分析实战:B站数据采集清洗与可视化看板搭建
1. 项目定位与功能架构1.1 这个系统到底解决了什么问题聊这个项目之前先说个场景。你刷B站的时候有没有好奇过一个问题同样是发了视频为什么有的UP主能一夜涨粉几万有的视频发出去播放量就卡在几百单纯靠盯着创作中心的日更数据其实很难看出规律。因为B站数据是分散的——你要看播放量趋势、要看三连转化率、要看粉丝增长曲线、要看分区热度分布这些指标分散在不同的页面和接口里靠人工一个个翻既费时间也看不出趋势。“基于python的B站数据分析可视化系统”要解决的就是把分散在B站各个公开接口里的数据拉下来经过清洗和规整存入本地数据库再用可视化的方式把规律呈现出来。说白了就是把“B站数据”和“Python数据分析”这两件原本各干各的事串成一条完整的流水线最终形成一个能交互的看板。它和市面上那些“查成分”“查数据”的小工具不一样那些工具多半是单点查询你输入一个UID它返回一个结果页面。这个系统是一个完整的个人项目你可以用自己的账号数据来分析也可以分析任何公开分区的视频和UP主信息搭建一套属于你自己的数据观测平台。适合谁如果你是正在学Python数据分析的初学者想找真实项目练手或者你是B站运营、UP主、内容研究员想量化分析B站内容生态再或者你就是个喜欢折腾数据的开发者想看看“爬虫清洗入库可视化”这条完整链路长什么样——这个项目都比较对口。1.2 整体架构与模块划分整个系统拆开来看是四个核心模块数据采集模块请求B站的公开API接口获取视频信息、UP主信息、分区数据等原始JSON数据存入本地临时文件或直接清洗入库。数据清洗模块用pandas对原始数据进行去重、补全、格式转换、异常值处理得到结构化DataFrame统一字段规范。数据存储模块将清洗后的数据写入MySQL数据库也可以换成SQLite设计视频表、UP主表、分区表等多张关联表供查询分析使用。数据分析与可视化模块后端用Flask提供聚合查询API前端用ECharts渲染图表搭建一个浏览器可访问的可视化看板。这个流程就是典型的“爬虫-数仓-报表”三段式结构只不过把数据规模从企业级缩小到一个个人项目能跑通的量级。参数规模不用贪大几十到几百条高质量数据就足够分析出规律了。1.3 技术选型为什么是 Python Flask ECharts先聊Python。这个项目选Python基本没有悬念。B站数据采集环节需要快速写脚本请求接口、解析JSONPython的requests和json标准库足够轻便清洗环节pandas是数据处理的事实标准后端提供API接口用Flask这种微框架非常合适它不重、不需要繁琐配置一个app文件就能跑起来。可视化选ECharts而不是matplotlib道理也很直接。matplotlib适合做静态科研图但B站数据看板要的是交互式图表——你想鼠标悬停看具体数值、想点击图例筛选维度、想缩放时间轴这些都依赖前端的动态渲染能力。ECharts从2013年开源到现在已经是中文互联网生态里数据可视化的事实标准之一文档全面、散点图热力图地图词云都能画。而Flask后端正好可以通过一个render_template直接渲染HTML页面把ECharts的静态资源和数据塞进去整个过程不用做CORS跨域处理省去不少麻烦。存储层一开始用MySQL等熟练之后再切SQLite或者DuckDB都不是难事。MySQL的优势在于你对SQL的掌握不会白费而且后期如果想把系统扩展成多人访问、并发查询的服务MySQL能抗住更大压力。SQLite更适合纯个人轻量使用但考虑到这个项目后续一定会往复杂方向迭代直接上MySQL一步到位更踏实。2. 采集层与B站开放接口的实操实战2.1 接口清单与数据字段B站的数据采集核心是找到对口的公开接口。这个系统日常采集的接口主要是这几个数据对象接口地址示例返回关键字段视频详情https://api.bilibili.com/x/web-interface/view?bvid...bvid,title,desc,pic,pubdate,duration,owner.mid,stat.view,stat.like,stat.coin,stat.favorite,stat.share,stat.reply,stat.danmaku分区视频列表https://api.bilibili.com/x/web-interface/popular?ps20pn1热门或通过分区tag接口视频基础信息列表包含上述字段UP主信息https://api.bilibili.com/x/space/wbi/acc/info?mid...mid,name,face,sign,fans,attention,level视频弹幕https://api.bilibili.com/x/v1/dm/list.so?oid...老接口返回XML弹幕内容、时间戳、发送者UID评论列表https://api.bilibili.com/x/v2/reply?type1oid...评论内容、点赞数、回复数这几张接口的数据“一鱼多吃”的思路是先从热门分区接口拿到一批视频bvid再逐个请求视频详情拿完整统计字段同时请求UP主信息接口把UP主数据存进关联表。弹幕和评论接口属于加分项量级大适合做文本分析但不作为看板的核心数据源。请求这些接口时重点注意鉴权参数。老一点的接口比如弹幕XML不需要额外sign直接带User-Agent访问就行。但现在的wbi接口基本都要计算签名——B站把签名算法从之前的appkeysign改成了wbi鉴权它需要在请求头里带buvid3从任意B站页面HTML里的window.__INITIAL_STATE__提取或从https://api.bilibili.com/x/frontend/finger/spi获取然后对请求参数按key排序拼接再用w_rid md5(查询串 密钥)的方式生成w_rid字段。你这套东西如果在本地自己玩不碰用户隐私数据用这个方法在合理频率下抓取分享类数据是学习网络编程和公开数据分析的正常途径。2.2 请求头与鉴权参数处理B站对请求头的校验挺严格。最典型的拦截是返回-412 Precondition Failed这是风控系统判定请求异常多半是请求频率过快或缺少必要Cookie时的状态码。为了减少被风控的概率请求头至少需要模拟一个真实浏览器的环境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://www.bilibili.com/, Origin: https://www.bilibili.com, Accept: application/json, text/plain, */*, Accept-Language: zh-CN,zh;q0.9, Accept-Encoding: gzip, deflate, br, }Referer 必须带这个字段是告诉服务端“我是从B站页面内部发起的请求”。如果没有Referer请求量稍大一点就很容易触发校验。wbi签名这块写一个简化的计算流程import hashlib import time from functools import reduce from urllib.parse import urlencode def get_w_rid(params: dict, auth_key: str) - str: # 1. 过滤空值 filtered {k: str(v) for k, v in params.items() if v not in (, None)} # 2. 按key字典序排列拼接成查询串 encoded urlencode(sorted(filtered.items(), keylambda x: x[0])) # 3. md5签名 return hashlib.md5((encoded auth_key).encode()).hexdigest()这个auth_key不是固定不变的它来源于nav接口返回的img_url和sub_url拼出来的字符串。B站会定期更换所以每次启动爬虫前动态获取一次最稳。2.3 抓取流程与控制节奏爬虫的运行节奏是整个采集模块的关键。我一般分三层控制请求间隔控制单个视频详情接口请求之间随机间隔0.5~1.5秒防止连续高频请求。热门列表接口每页间隔3秒左右。并发控制不追求并发。或者最多用ThreadPoolExecutor开3~5个线程但前提是单账号不频繁换IP。独立开发者在个人项目里靠单线程几百条数据根本不用着急。错误重试遇到-412或连不上服务器退避等待60秒再重试。连续失败3次就停下来人工介入别硬扛。用Python requests 库一个循环批量采集逻辑比较直接def fetch_video_detail(session, bvid: str) - dict | None: url https://api.bilibili.com/x/web-interface/view params {bvid: bvid} for attempt in range(3): try: resp session.get(url, paramsparams, headersHEADERS, timeout10) if resp.status_code 200: payload resp.json() if payload.get(code) 0: return payload[data] else: print(f业务码异常: {payload[code]}, msg: {payload.get(message)}) else: print(fHTTP {resp.status_code}) except Exception as e: print(f请求异常: {e}, 第{attempt 1}次重试) time.sleep(random.uniform(1, 3)) return None这段代码看着简单但能体现出几个工程点session复用TCP连接、超时控制、业务码校验、重试机制。实际跑起来100个视频大概几分钟就采完了慢的是后续的清洗入库不是网络请求。弹幕接口返回的是XML需要解析d标签内的文本和参数import xml.etree.ElementTree as ET def parse_danmaku(xml_text: str): root ET.fromstring(xml_text) result [] for d in root.findall(d): p_attrs d.get(p, ).split(,) if len(p_attrs) 4: result.append({ time: float(p_attrs[0]), mode: int(p_attrs[1]), font_size: int(p_attrs[2]), color: p_attrs[3], content: d.text, }) return result弹幕数据如果要入库注意它是Unicode编码可能有各种特殊符号入库前要看表的字符集是不是utf8mb4否则遇到emoji直接写不进去。这个问题我后面踩过专门列了一条排查记录。3. 数据清洗与存储设计3.1 数据表结构与字段映射数据库设计不需要搞得很复杂但字段类型和索引要考虑清楚。我建议建三张表就够了视频表、UP主表、分区表。视频表主要字段CREATE TABLE video ( id INT PRIMARY KEY AUTO_INCREMENT, bvid VARCHAR(32) NOT NULL UNIQUE, title VARCHAR(255) NOT NULL, desc TEXT, pic_url VARCHAR(512), pubdate DATETIME NOT NULL, duration_seconds INT, view_count INT DEFAULT 0, like_count INT DEFAULT 0, coin_count INT DEFAULT 0, favorite_count INT DEFAULT 0, share_count INT DEFAULT 0, reply_count INT DEFAULT 0, danmaku_count INT DEFAULT 0, owner_mid INT, zone_id INT, zone_name VARCHAR(64), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_pubdate (pubdate), INDEX idx_owner (owner_mid), INDEX idx_zone (zone_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;注意几点bvid设置唯一索引用于去重。同一视频因为接口重复返回insert时如果冲突直接跳过。数值字段都用INT播放量再大也扛得住。B站热门视频播放量千万级不会溢出。pubdate存的是秒级时间戳用FROM_UNIXTIME转换后再写入。清洗阶段统一成YYYY-MM-DD HH:MM:SS格式最方便后续按天分组。UP主表更简单CREATE TABLE up_user ( id INT PRIMARY KEY AUTO_INCREMENT, mid INT NOT NULL UNIQUE, name VARCHAR(64), face_url VARCHAR(512), sign TEXT, fan_count INT, attention_count INT, video_count INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_fans (fan_count) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;3.2 pandas 清洗的坑采集到的原始JSON其实是比较规整的但仍然有两类问题必须处理。第一类是字段类型问题。stat.view等字段在JSON里是数字但如果你在采集时把它转成了字符串再拼接存进MySQL再取出来科学家会发疯。统一在pandas阶段做类型转换import pandas as pd df pd.DataFrame(raw_data_list) df[view_count] df[view_count].astype(int) df[pubdate] pd.to_datetime(df[pubdate], units) df[pubdate] df[pubdate].dt.strftime(%Y-%m-%d %H:%M:%S)第二类是空值问题。有些视频标题可能很短有些UP主没有个性签名各种字段可能为None。在入库之前把所有None替换成合理的空值避免SQL执行时报错df df.fillna({desc: , sign: , pic_url: })3.3 入库与去重策略数据入库的方式我用的是pymysql的cursor.executemany批量插入比逐条insert快很多。但去重必须先做否则重复数据把表撑大后后续查询和分析质量会变差。两个策略INSERT IGNORE利用唯一索引插入时如果主键或唯一键冲突则忽略。先查询后插入对已存在的数据通过bvid判断是否需要更新。更新很好用因为视频数据是动态的今天采集的播放量一周后就变了。定期重采已有视频用ON DUPLICATE KEY UPDATE更新统计字段实现数据的动态追踪INSERT INTO video (bvid, title, view_count, like_count) VALUES (...) ON DUPLICATE KEY UPDATE view_count VALUES(view_count), like_count VALUES(like_count), updated_at CURRENT_TIMESTAMP;这样视频表就是“采集一次定期更新”的模式看板上的播放量趋势图可以每天抽一次快照存历史不过目前这个系统里趋势图主要用发布时间和当前统计字段组合算。4. 可视化层把数据变成看板4.1 图表选型与布局可视化层是整个系统最出效果的部分。经过前面的数据积累这一步要回答的问题是怎么把几十几百行数据转成一眼就能看懂的趋势。我选择的看板布局是单页DashBoard从上到下分四个区域顶部概览区用大数字卡片展示总视频数、总播放量、平均三连率、平均完播率估算等核心指标。这部分非常适合用ECharts的gauge或纯CSS数字动画来做但实际直接用StatCard组件更轻。中部趋势区用折线图展示视频发布时间与播放量的关系用柱状图展示各分区平均播放量Top10。下部深度区用散点图看“播放量 vs 点赞量”的相关性用饼图看分区占比用词云展示视频标题高频词。底部明细表数据表格列出所有视频的完整字段支持按播放量排序相当于一个可交互的明细页。ECharts的核心配置思路是不同图表类型对应不同数据结构。折线图适合时间序列柱状图适合类别对比散点图适合相关性分析饼图适合占比组成。在B站数据这个场景里这几个维度基本全覆盖了。4.2 后端聚合查询接口Flask充当的是“数据提供者”的角色它的任务是响应前端图表组件的请求从MySQL里查出聚合数据返回JSON。我用Blueprint把路由拆开方便后面继续加接口。from flask import Blueprint, jsonify import pymysql api_bp Blueprint(api, __name__) def get_db_conn(): return pymysql.connect( host127.0.0.1, userroot, passwordyourpassword, databasebilibili_analysis, charsetutf8mb4, cursorclasspymysql.cursors.DictCursor, ) api_bp.route(/api/overview) def overview(): conn get_db_conn() with conn.cursor() as cursor: cursor.execute(SELECT COUNT(*) AS total_video, SUM(view_count) AS total_views FROM video) total cursor.fetchone() cursor.execute( SELECT AVG(like_count / view_count) AS avg_like_rate FROM video WHERE view_count 0 ) rate cursor.fetchone() conn.close() return jsonify({ total_video: total[total_video], total_views: total[total_views], avg_like_rate: round(rate[avg_like_rate] * 100, 2) if rate[avg_like_rate] else 0, })这种接口写法简单直接。有一个细节pymysql.cursors.DictCursor会把查询结果变成字典而不是元组这在JSON序列化时非常省事。但别忘了每次用完后conn.close()否则连接池很快撑爆MySQL。4.3 ECharts 动态渲染前端页面用一个HTML模板搞定引入ECharts的CDN通过fetch调用后端接口拿到JSON后塞进图表配置。看板的基本套路是页面上先放几个div容器每个容器对应一个图表JS里按容器ID分别初选化和更新。div idtrendChart stylewidth: 100%; height: 420px;/divJS部分async function loadTrendData() { const resp await fetch(/api/trend); const data await resp.json(); const chart echarts.init(document.getElementById(trendChart)); chart.setOption({ tooltip: { trigger: axis }, xAxis: { type: category, data: data.pub_dates }, yAxis: { type: value, name: 播放量 }, series: [{ name: 播放量, type: line, data: data.view_counts, smooth: true, areaStyle: {} }], grid: { left: 80, right: 20, top: 60, bottom: 60 } }); }ECharts最需要注意的是setOption的覆盖逻辑当需要更新图表时如果直接又给一个不完整的配置对象旧配置里没有提到的部分不会被清掉。想要整个重置要显式调用chart.clear()再setOption。我一开始没注意这个导致图表每次刷新都叠加残留元素看着像bug其实是setOption没加notMerge参数。还有一个实用小技巧在window.onresize里调用chart.resize()否则浏览器窗口伸缩后图表要么溢出要么变形。5. 完整跑通项目的实操记录5.1 环境准备与依赖清单这个项目依赖不多安装顺序建议按下面来。我本地是Windows 11 Python 3.11macOS和Linux基本通用。推荐的依赖清单和用途依赖库版本建议用途requestslatest发送HTTP请求pandas2.x数据清洗与分析pymysql1.x连接MySQLFlask3.x提供可视化看板后端服务jinja2随Flask安装模板渲染pyecharts可不用如果你不想写原生ECharts JS可以用它在Python侧绘图生成HTML安装命令省不了pip install requests pandas pymysql flask这个清单里没有包含scrapy因为目前的数据规模不需要框架级的爬虫requests足够。如果后续要全集采集百万级数据再考虑引入scrapy或httpx异步那是后话。MySQL我用的是本地8.0版本连不上时优先检查MySQL服务有没有启动。如果你不想用MySQL可以把连接层改成sqlite3标准库代码改动很小但后续扩展性差一些看你自己取舍。5.2 核心代码逐块解读完整项目代码量大概有600~800行核心文件结构如下bilibili_analysis/ ├── spider/ │ ├── api.py # 接口请求封装 │ ├── wbi.py # wbi签名算法 │ └── crawler.py # 采集入口 ├── analysis/ │ └── clean.py # pandas清洗 ├── web/ │ ├── app.py # Flask应用 │ ├── api_routes.py # API路由 │ └── templates/ │ └── dashboard.html └── requirements.txt采集入口的核心逻辑是循环伪代码如下# crawler.py import json import random import time import requests from spider.api import fetch_video_detail from spider.wbi import get_nav_key def crawl(pages: int 2): session requests.Session() session.headers.update({ User-Agent: Mozilla/5.0 ..., Referer: https://www.bilibili.com/, }) buvid get_buvid3(session) auth_key get_nav_key(session) all_data [] for pn in range(1, pages 1): params {ps: 50, pn: pn} signed_params wbi_sign(params, auth_key) resp session.get(https://api.bilibili.com/x/web-interface/popular, paramssigned_params) data resp.json() for item in data[data][list]: all_data.append(extract_video_fields(item)) time.sleep(random.uniform(1, 2)) with open(data/raw_videos.json, w, encodingutf-8) as f: json.dump(all_data, f, ensure_asciiFalse, indent2)这里的extract_video_fields做字段映射把接口里的owner.mid等嵌套字段拍平这一步在清洗阶段会显得非常关键。清洗入库环节有一个值得注意的技巧那就是不要把清洗做成一个“一次性脚本”最好封装成可复用的函数并允许传入DataFrame。这样以后采集到新数据可以直接复用管道不用从头写。5.3 本地启动与效果验证跑通项目的命令次序是这样# 1. 先启动MySQL服务确认能连接 mysql -u root -p # 建库 CREATE DATABASE bilibili_analysis DEFAULT CHARACTER SET utf8mb4; # 2. 创建表执行建表SQL # 3. 运行爬虫采集数据 python spider/crawler.py python analysis/clean.py # 清洗并写入MySQL # 4. 启动Web服务 python web/app.py # 浏览器访问 http://127.0.0.1:5000打开看板后怎么验证数据是准的对比一下页面上展示的某条视频播放量跟B站网页上看到的数值是否一致。如果不一致优先排查清洗阶段的类型转换或字段映射。整体效果好的时候你会看到分区Top10柱状图、播放量趋势折线图、三连率散点图、词云都能正常渲染这基本就是整个系统的成果展示了。6. 常见问题与排查实录6.1 爬虫被风控返回-412这个问题我最初跑的时候遇到过好多次。表现是访问热门接口稳定返回-412但网页端一切正常。排查步骤确认请求头是否完整特别是Referer和User-Agent不能是Python默认的python-requests/x.x。确认是否携带了buvid3B站对没有buvid3的请求格外敏感。确认请求间隔。不要短时间内连续请求超过10次热门接口的风控阈值尤其低。如果还是被限制就切换数据源改去请求https://api.bilibili.com/x/web-interface/search/type搜索接口或者等待半小时后恢复。实际经验是个人开发者只要模拟正常浏览器逻辑适度频率基本不会触发风控。真的触发了就歇一会儿再继续B站风控一般封几十分钟就解除了。6.2 MySQL写入时报错“Incorrect string value”这个坑非常典型。当视频标题或者评论里带有emoji表情写入utf8mb3MySQL默认utf8字段时会报错。解决办法建库时显式指定DEFAULT CHARACTER SET utf8mb4。建表时每张表也要对应指定。连接串里加上charsetutf8mb4所有环节都要统一字符集少一个都不行。6.3 图表不显示数据图表空白常见的三个原因后端接口返回的JSON不是预期结构。在浏览器开发者工具里先看Network响应确认data里到底有没有值。ECharts容器高度为0。div只有width没有height图表会渲染不出内容。给图表容器一个显式的height: 420px样式即可。前端JS跑错。在浏览器控制台看有没有报错信息尤其是Cannot read properties of undefined (reading xxx)多半是后端返回数据和前端预期不一致。6.4 数据量大了之后性能变差当采集了几千条视频数据后聚合查询和前端渲染都会出现卡顿。优化方向数据库加索引。idx_pubdate、idx_zone_id这些字段要建聚合SQL的WHERE条件靠它们。聚合查询尽量在SQL层完成不要把全表数据拉到Python内存里再过滤。前端用tooltip.trigger只在交互时才计算不要一次性渲染过多点大数据量时可以使用ECharts的sampling: lttb对折线图降采样。如果数据量再上一个大台阶比如几十万条把MySQL换成ClickHouse或者DuckDB那时前端逻辑基本不用动。另外个人开发者的数据采集本身要遵守Robots协议和平台规则这个项目涉及的公开接口用于学习研究和技术交流是合适的。我在文章里也刻意避开了任何与付费内容解码、用户隐私追踪相关的方向大家自己写代码时也尽量把边界划清楚。写在最后的一点经验这套系统从零到跑通前前后后大概用了一个周末加两个晚上。我个人的体会是它的难点不在某一个单一技术而在“把采集、清洗、入库、展示串起来”的全局思维。很多学爬虫的朋友学到requests就停了学pandas的又停留在读CSV上而真正做数据分析项目时你会发现每一步之间的衔接才是最容易出问题的地方。比如清洗时字段类型不对、入库时编码不一致、查询时索引没建好、渲染时容器没高度这些细节单个看都不难但叠加在一起确实能把人绕晕。如果你也想动手复现这个项目我的建议是先别追求功能全面先把“采集50条视频数据 - 清洗入MySQL - Flask返回JSON - ECharts画出柱状图”这条最小闭环跑通。跑通之后再逐步加分区分析、趋势图、词云、弹幕分析等功能也不迟。最后再分享一个小技巧做数据分析项目数据的“历史积累”比“单次抓取”有价值得多。这一版系统只是静态采集后续我打算加一个定时任务比如每天凌晨跑一次采集长期下来就能做出播放量随时间变化的真实趋势曲线那时候的分析价值会比单存快照大很多。这种持续迭代的快乐大概是做数据分析项目最让人上瘾的地方了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

用 Go 打造交通数据分析可视化平台:从 PRD 到可演示数据产品的完整实战指南 2026/9/25 3:00:51

用 Go 打造交通数据分析可视化平台:从 PRD 到可演示数据产品的完整实战指南

教程文档 【免费下载链接】easy-vibe 从 0 到 1 学会 vibe coding,项目制学习 项目地址: https://gitcode.com/datawhalechina/easy-vibe 点击查看 免费下载 这是一篇面向 datawhalechina/easy-vibe 项目 Stage 2 学习者的综合实战指南。你将围绕一份真…

阅读更多 →
2024数学建模国赛C题:从数据清洗到线性规划的全流程复现 2026/9/25 3:00:51

2024数学建模国赛C题:从数据清洗到线性规划的全流程复现

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

阅读更多 →
Containerization x86_64 部署构建指南:基于 aarch64 开发容器交叉产出 Linux 部署包 2026/9/25 3:00:32

Containerization x86_64 部署构建指南:基于 aarch64 开发容器交叉产出 Linux 部署包

容器运行时虚拟化云原生 【免费下载链接】containerization Containerization is a Swift package for running Linux containers on macOS. 项目地址: https://gitcode.com/gh_mirrors/cont/containerization 点击查看 免费下载 本指南围绕 make dist-x86_64 展开…

阅读更多 →
BAML jsonish 柔性解析器:把 LLM 自由文本可靠地解析成结构化数据 2026/9/25 3:00:32

BAML jsonish 柔性解析器:把 LLM 自由文本可靠地解析成结构化数据

编程语言AI Agent编译器CLI人工智能 【免费下载链接】baml The programming language for agents 项目地址: https://gitcode.com/gh_mirrors/ba/baml 点击查看 免费下载 本文聚焦 BAML 引擎中的 jsonish 库(位于 engine/baml-lib/jsonish)&…

阅读更多 →
TEN Framework 中的 clasp:答案集求解器的工作原理、构建方式与在依赖解析中的落地 2026/9/25 3:00:32

TEN Framework 中的 clasp:答案集求解器的工作原理、构建方式与在依赖解析中的落地

人工智能AI Agent多模态语音AI 应用 【免费下载链接】ten-framework Open-source framework for conversational voice AI agents 项目地址: https://gitcode.com/TEN-framework/ten-framework 点击查看 免费下载 本篇以 vendored 在仓库内的 clasp README 为核心&…

阅读更多 →
Falcon 发布全流程指南:从版本号到稳定分支的 Release Manager 实操手册 2026/9/25 3:00:26

Falcon 发布全流程指南:从版本号到稳定分支的 Release Manager 实操手册

后端Web框架API设计 【免费下载链接】falcon The no-magic web API and microservices framework for Python developers, with a focus on reliability and performance at scale. 项目地址: https://gitcode.com/gh_mirrors/fa/falcon 点击查看 免费下载 导读 本…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉