提取 WordPress 博客文章标题 URL(Python 和 WordPress 特技)
如果您正在运行 WordPress 博客,您可能已经考虑过提取文章标题的 URL。
我也很好奇自己写了多少东西,当我对帖子进行修改(比如永久链接)时,我必须通过 Google Search Console 等地方的 URL 检查器重新注册帖子地址。
在本篇文章中,我们将使用 Python 脚本创建一个 自动提取帖子的标题和 URL至 保存为 excel 文件下面我就来教大家怎么做,请看下面的内容,然后跟着我一起做。
习惯安装和使用 VS 代码
首先,让我们编写一个 Python 脚本并安装 VS 代码来运行它。 安装 VS CODE - Windows 跟帖
如果您是 VS 代码的新手,我们建议您阅读下面的文章,以帮助您快速上手。
Python 源代码和运行
修改 Python 源代码
只需将下面的代码复制并粘贴到您的 VS 代码中,然后运行即可。 不过,您只需将底部的地址(粗体)替换为您自己的地址即可。
以 # 为例(secondlife.lol)
api_endpoint = 'https://secondlife.lol/wp-json/wp/v2′
导入请求
导入 json
从 openpyxl 导入工作簿
导入时间
def get_all_wordpress_posts(api_endpoint, auth=None):
headers = {'Accept': 'application/json'}
if auth:
headers['Authorisation'] = auth
posts = []
page = 1
每页 = 10
while True:
try:
response = requests.get(f"{api_endpoint}/posts?page={page}&per_page={per_page}", headers=headers)
response.raise_for_status()
page_posts = json.loads(response.content)
if not page_posts:
print(f "We've processed all pages, we've fetched a total of {len(posts)} posts.")
断开
posts.extend(page_posts)
page += 1
print(f "Finished processing page {page-1}.共获取 {len(posts)} 个帖子。")
time.sleep(1) # 每次请求之间等待 1 秒钟
except requests.exceptions.HTTPError as e:
"if response.status_code == 400 and "rest_post_invalid_page_number" in response.text:
print(f "Page {page} is invalid, a total of {len(posts)} posts were fetched.")
else:
print(f "HTTP 错误发生:{e}")
打印(f "响应内容:{response.text}")
中断
except Exception as e:
print(f "Exception thrown: {e}")
中断
返回帖子
def save_to_excel(posts, filename="post_info.xlsx"):
wb = Workbook()
ws = wb.active
ws.append(["Title", "URL"]) 添加 # 标头
for posts in posts:
ws.append([post['title']['rendered'], post['link']])
wb.save(filename)
print(f"{filename}成功将 {len(posts)} 帖子信息保存到文件。")
使用 # 示例(secondlife.lol)
api_endpoint = 'https://secondlife.lol/wp-json/wp/v2'
auth = 'Basic '
print("Starting to fetch posts...")
posts = get_all_wordpress_posts(api_endpoint, auth)
print(f "A total of {len(posts)} posts were fetched.")
如果 posts:
save_to_excel(posts)
else:
print("No posts were imported.")
WordPress 博客文章标题 URL 提取结果
在上面的代码中,当执行时,它会遍历分页分离的页面并获取所有帖子信息。 下面显示的是顺序进展。 最后,会生成一个 post_info.xlsx 文件。



需要注意的一点是,帖子信息文件(post_info.xlsx)与源代码文件(post_list_url_r1.2.py)生成在同一文件夹中,因此你不应该像从网上下载东西那样,在下载文件夹或类似文件夹中查找生成的结果文件。
组织起来
在本篇文章中,我们向您展示了如何使用 Python 与 WordPress API 交互、提取 WordPress 博客文章标题、提取 URL 并将其保存到 excel 文件中。
通过这些步骤,你现在应该有了一个管理博客的小工具库。
在下一篇文章中,我将以这篇文章为基础,分享如何在 Google Search Console 等地方自动注册博文 URL(我在这篇文章中也尝试过,但似乎并不容易)。
我们祝愿您在 secondlife.lol 上写出更聪明的博客。
供参考、 导出所有 URL插件,因此您可能需要使用该插件。
#解读源代码
源代码和关键注释
导入请求
导入 json
从 openpyxl 导入工作簿
导入时间
def get_all_wordpress_posts(api_endpoint, auth=None):
""通过处理分页获取所有 WordPress 帖子的函数"""
设置 # API 请求所需的头信息
headers = {'Accept': 'application/json'}
如果 auth:
headers['Authorisation'] = auth
posts = [] # 列表,用于存储所有帖子
page = 1 # 初始页码
per_page = 10 # 一次获取的帖子数设置为 10
while True:
try:
向 # API 端点发送请求,获取每页的帖子数
response = requests.get(f"{api_endpoint}/posts?page={page}&per_page={per_page}", headers=headers)
response.raise_for_status() # 如果请求不成功,则抛出异常
将 # 响应数据转换为 JSON 格式
page_posts = json.loads(response.content)
if not page_posts:
break # 如果没有更多帖子,则结束循环
# 将获取的帖子添加到列表中
posts.extend(page_posts)
page += 1 # 转到下一页
print(f "Processing page {page-1} complete.共获取 {len(posts)} 个帖子。")
time.sleep(1) # 在每次请求之间等待 1 秒钟(以减轻服务器负载)
except requests.exceptions.HTTPError as e:
# 出现 HTTP 错误时该怎么办
print(f "HTTP 错误:{e}")
print(f "Response content: {response.text}")
中断
except Exception as e:
# 出现其他异常时该怎么办
print(f "Exception thrown: {e}")
中断
返回帖子 # 返回所有帖子
def save_to_excel(posts, filename="post_info.xlsx"):
"""Function to save post titles and URLs to an excel file.""""
wb = Workbook() # 创建一个新的 Excel 工作簿
ws = wb.active # 选择活动工作表
ws.append(["Title", "URL"]) # 在第一行添加标题
for posts in posts:
# 在 excel 文件中添加每个帖子的标题和 URL
ws.append([post['title']['rendered'], post['link']])
wb.save(filename) # 保存 excel 文件
print(f"{filename}成功将 {len(posts)} 帖子信息保存到文件。")
使用 # 示例(secondlife.lol)
api_endpoint = 'https://secondlife.lol/wp-json/wp/v2' # WordPress API 端点
auth = 'Basic ' # 根据需要添加验证信息(Base64 encoded username:password)
print("Starting to fetch posts...")
posts = get_all_wordpress_posts(api_endpoint, auth) # 调用帖子获取函数
print(f "A total of {len(posts)} posts were fetched.")
if posts:
save_to_excel(posts) 将 # 的帖子(如果有的话)保存到 excel 文件中
else:
print("No posts were imported.") 如果没有找到 # 帖子,则打印信息详细注释说明
- 导入模块
要求用于发送 HTTP 请求的模块。json模块:用于处理 JSON 数据的模块。openpyxl:用于处理 excel 文件的模块。时间使用时间相关功能的模块。
- get_all_wordpress_posts 函数
api_endpoint和授权作为参数,通过 WordPress API 获取所有帖子。
- 设置标头
headers = {'Accept': 'application/json'}设置标头以接收 JSON 格式的响应。如果 auth:文件头:在文件头中添加证书(如有)。
- 设置列表和页面以存储职位数据
职位 = []:用于存储帖子的空列表。页 = 1:初始页码。每页 = 10:一次获取的帖子数量。
- 通过循环语句进行 API 请求
while True:取帖:以无限循环的方式按页面取帖。response = requests.get(...)向 API 端点发送请求。response.raise_for_status()如果请求失败,则引发异常。page_posts = json.loads(response.content)将响应数据转换为 JSON 格式。if not page_posts:当没有更多帖子时,结束循环。posts.extend(page_posts)将导入的帖子添加到列表中。page += 1: 转到下一页。time.sleep(1):每次请求之间等待 1 秒钟。
- 异常处理
except requests.exceptions.HTTPError as e:当出现 HTTP 错误时的处理方法。例外情况除外处理其他异常情况。
- 返回职位数据
返回帖子返回所有邮寄数据。
- save_to_excel 函数
帖子和文件名作为参数,将帖子数据保存到 excel 文件中。
- 创建 Excel 文件并保存数据
wb = Workbook()创建一个新的 Excel 工作簿。ws = wb.active选择活动工作表。ws.append(["Title", "URL"])标题:在第一行添加标题。为 posts 中的 post:将每个帖子的标题和 URL 添加到 excel 文件中。wb.save(filename):保存 Excel 文件。
- 主代码
api_endpoint = 'https://secondlife.lol/wp-json/wp/v2':WordPress API 端点设置。auth = 'Basic '注意:如果需要,请添加验证信息。print("Starting to import posts...")输出欢迎信息。posts = get_all_wordpress_posts(api_endpoint, auth)调用后获取功能。print(f "A total of {len(posts)} posts were fetched.")输出职位数。if posts: save_to_excel(posts)保存到 excel 文件(如果有职位)。else: print("No posts were imported.")如果没有帖子,则输出一条信息。






