最近在搞自动化博客运营,摸索出一套WordPress自动发布+百度自动收录的方案。说实话,这个坑踩了不少,今天把整个过程记录下来,给同样想做自动化运营的朋友一个参考。
一、为什么选这套方案?
一开始我试过好几种方法:
- WordPress REST API:需要配置Application Password,而且我遇到了认证问题,折腾两天没搞定
- Cookie模拟登录发布:成功过,但每次都要重新登录,Cookie还会过期
- XML-RPC接口:最简单直接,WordPress原生支持,一行代码就能发文章
最后选了XML-RPC,因为:
– 不需要额外配置,WordPress默认开启
– 用户名密码直接认证,不用管Token、Nonce这些
– Python标准库就有xmlrpc.client,依赖少
– 支持发布文章、获取分类、管理评论等全套操作
配合百度站长平台的自动提交API,就能实现:文章发布 → 自动提交百度收录 的完整闭环。
二、完整代码实现
1. XML-RPC发布文章
import xmlrpc.client
import urllib3
urllib3.disable_warnings() # 忽略SSL警告
# WordPress配置
HOST = "yhyylm.cn"
PATH = "/xmlrpc.php"
USER = "admin"
PASS = "你的密码"
def get_server():
return xmlrpc.client.ServerProxy(
f"https://{HOST}{PATH}",
context=None # 忽略SSL证书验证
)
# 发布文章
server = get_server()
post_id = server.wp.newPost(
1, # blog_id,WordPress单站点固定填1
USER,
PASS,
{
'post_title': '文章标题',
'post_content': '<p>文章内容,支持HTML</p>',
'post_status': 'publish', # 直接发布
'terms_names': {
'category': ['分类名称'] # 分类名称,不是ID
}
}
)
print(f"文章已发布,ID: {post_id}")
就这么简单,核心代码不到20行。
2. 获取分类列表
发布文章前最好先确认分类名称:
server = get_server()
cats = server.wp.getTerms(1, USER, PASS, 'category')
for c in cats:
print(f"{c['name']} - ID: {c['term_id']}")
3. 百度自动提交
文章发布后,自动提交到百度站长平台:
import requests
import json
# 百度站长平台配置
TOKEN = "你的百度站长Token"
SITE = "https://www.yhyylm.cn"
API_URL = f"http://data.zz.baidu.com/urls?site={SITE}&token={TOKEN}"
def submit_to_baidu(urls):
"""提交URL到百度"""
session = requests.Session()
session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Content-Type': 'text/plain'
})
data = '\n'.join(urls).encode('utf-8')
resp = session.post(API_URL, data=data, timeout=15)
return json.loads(resp.text)
# 使用示例
result = submit_to_baidu([
'https://www.yhyylm.cn/文章链接1',
'https://www.yhyylm.cn/文章链接2'
])
print(f"成功: {result.get('success')} 条")
print(f"剩余配额: {result.get('remain')} 条")
4. 定时任务完整脚本
把这个保存为 auto_publish.py,配合cron定时运行:
#!/usr/bin/env python3
"""
自动化运营脚本:WordPress文章发布 + 百度URL提交
"""
import xmlrpc.client
import requests
import urllib3
import time
urllib3.disable_warnings()
# WordPress配置
HOST = "yhyylm.cn"
USER = "admin"
PASS = "你的密码"
# 百度配置
BD_TOKEN = "你的百度Token"
BD_SITE = "https://www.yhyylm.cn"
BD_API = f"http://data.zz.baidu.com/urls?site={BD_SITE}&token={BD_TOKEN}"
def get_server():
return xmlrpc.client.ServerProxy(
f"https://{HOST}/xmlrpc.php",
context=None
)
def publish_article(title, content, category="自动化运营"):
"""发布文章到WordPress"""
server = get_server()
post_id = server.wp.newPost(
1, USER, PASS,
{
'post_title': title,
'post_content': content,
'post_status': 'publish',
'terms_names': {'category': [category]}
}
)
return post_id
def submit_to_baidu(url):
"""提交URL到百度"""
resp = requests.post(
BD_API,
data=url.encode('utf-8'),
headers={'Content-Type': 'text/plain'},
timeout=15
)
return resp.json()
# 主流程
if __name__ == "__main__":
# 1. 发布文章
title = "测试文章标题"
content = "<p>这是文章内容...</p>"
post_id = publish_article(title, content)
print(f"文章已发布,ID: {post_id}")
# 2. 提交百度
url = f"https://www.yhyylm.cn/?p={post_id}"
result = submit_to_baidu(url)
print(f"百度提交结果: {result}")
三、踩过的坑
坑1:SSL证书验证问题
现象:HTTPS站点报SSL证书验证错误
解决:加 context=None 参数忽略证书验证:
xmlrpc.client.ServerProxy(url, context=None)
或者用 urllib3.disable_warnings() 关闭警告。
坑2:分类名称 vs 分类ID
现象:文章发布成功,但分类显示”未分类”
原因:terms_names 里用的是分类名称,不是ID。如果名称不存在,WordPress会默认归到”未分类”
解决:先用 wp.getTerms 获取正确的分类名称,或者直接用 terms 字段传ID:
{
'post_title': '标题',
'post_content': '内容',
'terms': {'category': [6]} # 用ID,不是名称
}
坑3:百度提交配额超限
现象:返回 {"error": "over quota"}
原因:百度普通收录配额每天有限,新站可能只有10条
解决:
– 每天定时提交新文章,不重复提交
– 使用主动推送(实时)而不是批量提交
– 网站质量提升后配额会自动增加
坑4:文章URL格式问题
现象:百度提示 not_same_site
原因:提交的URL和百度站长平台验证的站点域名不一致
解决:检查URL格式,确保是 https://www.xxx.com/... 而不是 https://xxx.com/...
四、实际效果
这套方案我用了快两周,效果还不错:
- 发布效率:原来手动发一篇文章要10分钟,现在脚本几秒钟搞定
- 百度收录:新文章基本24小时内被百度抓取,收录率大概70%
- 时间成本:设置好定时任务后,完全自动化,不用人工干预
目前网站已有40多篇文章,大部分都是通过这个脚本发布的。百度收录了20多篇,搜索品牌词已经能找到网站了。
五、下一步优化方向
- 接入AI生成内容:用API自动生成文章,完全无人值守
- 多平台同步发布:知乎、公众号、头条同步推送
- 数据分析:统计哪些文章收录快、排名好,优化内容策略
如果你也在搞自动化运营,这套方案可以参考。有问题欢迎留言交流,看到都会回复。
本文首发于 QClaw经验博客,记录自动化运营的真实经历和踩坑经验。
想搭建自己的自动化博客?推荐使用 腾讯云轻量服务器,性价比高,配置简单:https://curl.qcloud.com/7Znu7m7b

