
1. 为什么我放弃了拍脑袋选题改用 OpenClaw 拉百度指数写博客最痛苦的不是写不出来而是写完没人看。我早期选题全靠“我觉得这个技术点挺酷”结果一篇讲冷门构建工具的长文发出去一周阅读量还没我朋友圈点赞多。后来才想明白创作方向不是猜出来的是查出来的。百度指数记录了大量中文用户的真实搜索行为一个关键词的搜索量曲线、同比环比、相关词分布基本能告诉你“现在大家在找什么”。OpenClaw 在这里扮演的角色是一个可编程的“数据采集分析”工作台。它本身不生产数据但能通过配置把百度指数的公开数据接口、你自己的关键词库、以及大模型语义分析串成一条流水线。你给它一个种子词它帮你扩展出相关词、拉取热度、做聚类最后输出一份“哪些方向值得写、哪些方向已经卷死”的参考清单。这套流程适合谁适合有自己博客或技术公众号、想用数据辅助选题、但又不想每天手动翻指数页面的创作者。你不需要会写爬虫但需要能看懂 TOML 配置、会跑 Python 脚本、能接受“数据只是参考最终判断还是靠人”这个前提。下面我把从环境准备到跑通一次关键词热度拉取的完整过程拆开讲配置和命令都可以直接复制。2. TaoToken 前置统一 Key 与 API 通道怎么准备OpenClaw 在分析环节需要调用大模型做语义扩展和聚类比如把“机器学习”扩展成“监督学习”“模型调参”“特征工程”这些相关词再判断哪些词属于同一主题簇。如果每个模型都单独配 Key、单独改 base_url配置会非常碎。我的做法是用 TaoToken 作为统一通道一个 Key 管多个模型OpenClaw 侧只改一个base_url和api_key就能切换底层模型。先到官网注册并拿到 Keyhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。登录后进控制台在 API Keys 页面创建一个新 Key复制出来先存到环境变量里别直接写进代码仓库。export TAOTOKEN_API_KEYsk-你的实际keyTaoToken 的 API 入口是https://taotoken.net/api注意这个地址不带 UTM 参数配置里直接写这个。OpenClaw 的模型调用走 OpenAI 兼容格式所以base_url填https://taotoken.net/api/v1即可。如果你后面想换模型比如从通用对话模型换成更擅长结构化输出的模型只需要改model字段Key 和地址都不用动。注意Key 不要提交到 Git也不要在博客截图里露出完整字符串。我习惯用.env文件加python-dotenv加载下面配置示例里会用环境变量占位。3. OpenClaw 侧 config.toml 骨架与可复制配置OpenClaw 的主配置文件是config.toml放在项目根目录。下面这份骨架是我实测能跑通的最小配置包含三个区块[llm]负责模型通道[baidu_index]负责指数数据源[analysis]负责关键词扩展和聚类参数。# config.toml [llm] provider openai_compatible base_url https://taotoken.net/api/v1 api_key ${TAOTOKEN_API_KEY} model gpt-4o-mini timeout 60 max_retries 3 [baidu_index] # 百度指数公开数据接口地址按实际可用端点填写 endpoint https://index.baidu.com/api/SearchApi/index cookie ${BAIDU_INDEX_COOKIE} user_agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 granularity day date_range_days 30 [analysis] seed_keywords [OpenClaw, 博客选题, 关键词分析] expand_count 20 cluster_count 5 min_search_volume 100 output_format markdown output_path ./reports/keyword_heat.md几个关键点解释一下。base_url指向 TaoToken 的兼容端点api_key用环境变量注入这样你本地和服务器可以用不同 Key。baidu_index区块里的cookie需要你从浏览器登录百度指数后复制因为指数接口对未登录请求限制较严granularity选day适合看短期波动选week或month适合看长期趋势。analysis区块的seed_keywords就是你的初始方向比如你写技术博客可以填“Python”“云原生”“AI 应用”这类词。如果你还没有百度指数的 Cookie可以先在浏览器打开指数页面登录后按 F12 进 Network 面板刷新一次找到SearchApi/index请求把 Request Headers 里的 Cookie 整段复制出来存到环境变量export BAIDU_INDEX_COOKIE你复制的cookie字符串提示Cookie 有时效性过期后需要重新复制。建议把这一步写成一个手动刷新脚本别硬编码在配置里。4. 跑一次关键词热度拉取与结果校验配置写好后OpenClaw 的入口脚本我放在scripts/fetch_heat.py。它做三件事读配置、调百度指数接口拉数据、调 TaoToken 通道做语义扩展和聚类最后输出 Markdown 报告。# scripts/fetch_heat.py import os import toml import requests from openai import OpenAI config toml.load(config.toml) llm_cfg config[llm] index_cfg config[baidu_index] ana_cfg config[analysis] client OpenAI( base_urlllm_cfg[base_url], api_keyos.environ[llm_cfg[api_key].strip(${})] ) def fetch_index(keyword): headers { Cookie: os.environ[BAIDU_INDEX_COOKIE], User-Agent: index_cfg[user_agent], } params { word: keyword, startDate: 2024-01-01, endDate: 2024-01-30, granularity: index_cfg[granularity], } resp requests.get(index_cfg[endpoint], headersheaders, paramsparams, timeout30) resp.raise_for_status() return resp.json() def expand_keywords(seed): prompt f围绕关键词「{seed}」扩展 {ana_cfg[expand_count]} 个中文搜索词只输出词列表每行一个。 resp client.chat.completions.create( modelllm_cfg[model], messages[{role: user, content: prompt}], temperature0.7, ) return [w.strip() for w in resp.choices[0].message.content.split(\n) if w.strip()] if __name__ __main__: for seed in ana_cfg[seed_keywords]: words expand_keywords(seed) print(f种子词 {seed} 扩展出 {len(words)} 个相关词) for w in words[:5]: data fetch_index(w) print(w, -, str(data)[:120])运行前确认依赖装好pip install toml requests openai python scripts/fetch_heat.py成功的话你会看到类似输出种子词扩展出若干相关词每个词后面跟着一段指数接口返回的 JSON 摘要。如果某个词返回空或报错先检查 Cookie 是否过期、关键词是否被指数收录。校验结果是否合理可以拿一个你熟悉的热词去百度指数网页版对比比如搜“Python”看脚本拉到的日均值和网页显示是否在同一量级。偏差过大说明参数或 Cookie 有问题。拿到数据后OpenClaw 会按cluster_count做主题聚类输出到./reports/keyword_heat.md。报告里每个簇会列出代表词、平均搜索量、竞争度估算。你重点看两类搜索量稳定上升但内容供给少的词优先写搜索量高但头部内容已经饱和的词除非你有独特角度否则先放一放。5. 本篇常见错排查报错一401 Unauthorized或invalid api key。先确认TAOTOKEN_API_KEY环境变量在当前终端生效echo $TAOTOKEN_API_KEY能看到值。如果用的是.env文件确认脚本里加载了dotenv。另外检查base_url是否写成了https://taotoken.net/api/v1少写/v1或写成带 UTM 的地址都会导致鉴权失败。报错二百度指数返回{status:0,data:null}。最常见原因是 Cookie 过期。重新登录百度指数复制 Cookie更新环境变量后重跑。其次检查startDate和endDate格式是否为YYYY-MM-DD以及关键词是否被指数收录——太冷门的词指数不收录换一个近义词试试。报错三toml.decoder.TomlDecodeError。TOML 对引号和缩进敏感。检查api_key ${TAOTOKEN_API_KEY}这行有没有漏引号区块标题[llm]有没有拼错。建议用python -c import toml; toml.load(config.toml)单独验证配置文件语法。报错四聚类结果全是同一个主题。说明expand_count太小或temperature太低模型扩展的词多样性不够。把expand_count调到 30 以上temperature调到 0.8 左右再试。如果还是不行手动在seed_keywords里加几个不同方向的词给聚类更多输入。报错五脚本跑通但报告为空。检查output_path目录是否存在OpenClaw 不会自动创建多级目录。先mkdir -p ./reports再跑。另外确认min_search_volume阈值是不是设太高把低于阈值的词全过滤掉了临时调到 0 看是否有输出。6. 从热度数据到创作方向我的收尾动作数据拉出来只是第一步真正决定写什么的还是你的判断。我通常会把报告里的词分成三档第一档是“搜索量中等偏上、竞争度低、和我已有内容能形成系列”的词直接排进下周选题第二档是“搜索量高但竞争激烈”的词拆成更细的长尾角度再查一次第三档是“搜索量低但趋势向上”的词放进观察列表每两周复查一次曲线。如果你在配置 OpenClaw 或调 TaoToken 通道时遇到鉴权、模型切换的问题可以直接去 API Keys 页面重新生成一个 Key 对比测试https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入文档里有 OpenAI 兼容格式的完整参数说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。想先验证模型返回是否正常用模型对话页发一条测试消息最快https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你打算把这条分析流水线做成长期跑的 Agent比如每天自动拉指数、自动生成选题建议那 Coding Plan 的额度模式会比按次调用更省心https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后说一个我踩过的坑别把指数数据当成唯一真理。有些技术词搜索量低但读者粘性极高写一篇能带来精准粉丝有些词搜索量高但来的全是泛流量看完就走。数据帮你排除明显不值得写的方向剩下的还是靠你对读者的理解。