跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

30 行 Python 实现公开接口数据抓取与本地图库构建

本文演示如何使用 Python 脚本通过公开 API 接口抓取网页元数据并保存为本地文件。核心方案涉及请求速率控制、异常重试机制及断点续抓技巧,强调遵守 Robots 协议与法律法规。代码包含随机 User-Agent 模拟与 IP 频次校验处理,适合用于学习网络爬虫基础逻辑与数据持久化方法。

编程诗人发布于 2026/3/29更新于 2026/10/2588 浏览
30 行 Python 实现公开接口数据抓取与本地图库构建

用 Python 把公开合集数据'搬'进本地数据库

最近很多站点的新主题合集页采用前端渲染,数据通过 API 接口一次性返回 JSON,无需模拟点击'加载更多'。本文示范如何遵守 Robots 协议、放缓速率,仅采集'公开可见'字段,并给出断点续抓、User-Agent 随机化、异常重试等常用技巧。

核心思路三步走

  1. 分析列表接口:在浏览器 DevTools 里筛选 XHR,发现真实请求 URL 形如 https://example.com/api/v2/theme/list?page={page}&size=20,返回体含 data.total 与 data.list。
  2. 解析单条记录:字段 title、author、coverUrl 即为我们需要的元数据,无需再进详情页。
  3. 限速 + 重试:用 tenacity 的 @retry 装饰器,遇到 429 自动退避;全局速率控制确保平均请求数低于限制。

运行环境

Python ≥ 3.7,依赖如下:

pip install requests pandas tenacity fake-useragent

代码实现

文件命名为 save_target_meta.py:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
抓取目标站点公开主题合集元信息,仅采集 title/author/coverUrl 三字段。
仅供学习,请遵守平台 robots.txt 与相关法律法规。
"""
import csv, time, random, requests
from tenacity import retry, stop_after_attempt, wait_fixed
from fake_useragent import UserAgent

BASE_URL = "https://example.com/api/v2/theme/list"
CSV_FILE = "target_meta.csv"
PAGE_SIZE = 20
MAX_PAGE = 50  # 按需调整,0 表示抓全量
SLEEP_RANGE = (1, 2)  # 秒,随机休眠
ua = UserAgent()
session = requests.Session()
session.headers.update({"Referer": "https://example.com/"})

@retry(stop=stop_after_attempt(3), wait=wait_fixed(10))
 ():
    session.headers.update({: ua.random})
    params = {: page, : PAGE_SIZE}
    resp = session.get(BASE_URL, params=params, timeout=)
     resp.status_code == :
         Exception()
    resp.raise_for_status()
     resp.json()

 ():
    writer = 
     p  (, MAX_PAGE + ):
        ()
        js = fetch_one_page(p)
        rows = [{: item[], : item[], : item[]}  item  js[][]]
          writer:
            writer = csv.DictWriter((CSV_FILE, , newline=, encoding=), fieldnames=[, , ])
            writer.writeheader()
        writer.writerows(rows)
         js[][] <= p * PAGE_SIZE:
            
        time.sleep(random.uniform(*SLEEP_RANGE))
    ()

 __name__ == :
    main()
def
fetch_one_page
page: int
"User-Agent"
"page"
"size"
10
if
429
raise
"Rate limited"
return
def
main
None
for
in
range
1
1
print
f"[+] 正在抓取第 {p} 页 …"
"title"
"title"
"author"
"author"
"coverUrl"
"coverUrl"
for
in
"data"
"list"
if
not
open
"w"
""
"utf-8"
"title"
"author"
"coverUrl"
if
"data"
"total"
break
print
f"[√] 抓取完成,已写入 {CSV_FILE}"
if
"__main__"

运行后同级目录生成 target_meta.csv,可导入 Excel 或数据库二次分析。若需增量更新,可把 CSV_FILE 改为 SQLite,并在写入前按 title 做唯一索引去重。

合规提醒

  • 仅抓取'公开可见'字段,不绕过登录、不破解加密参数;
  • 速率温和,不干扰站点正常服务;
  • 数据勿商用,尊重原作者版权。

调试过程中遇到问题,建议查阅官方文档或社区讨论,共同维护良好的技术交流氛围。

目录

  1. 用 Python 把公开合集数据“搬”进本地数据库
  2. 核心思路三步走
  3. 运行环境
  4. 代码实现
  5. -- coding: utf-8 --
  6. 合规提醒

更多推荐文章

查看全部
  • 昇腾 NPU 部署 Mistral-7B-Instruct-v0.2 模型实战指南
  • C++ 模板的幻觉:实例化、重定义与隐藏依赖
  • gRPC 跨语言 RPC 框架核心原理与选型指南
  • 主流 AI 绘图软件盘点及 Midjourney 使用教程
  • C++ 继承进阶:友元、静态成员与菱形继承底层逻辑
  • OpenClaw Ubuntu 安装指南
  • Git 核心知识体系:从原理到实战演进
  • 三大开源中文语音合成模型推理速度实测
  • MySQL 动态分区管理:自动化与优化实践
  • System Verilog 实战指南:从基础语法到高级验证技术
  • JavaScript 基础:变量、DOM、表单与定时器
  • ChatGPT 抵制运动与军方合作争议:AI 伦理及具身智能产业化现状
  • 自适应图像变焦与边界框变换用于无人机目标检测
  • AI 商业价值与盈利趋势深度解析
  • GitHub Copilot 学生认证申请指南与常见问题排查
  • StableDiffusion-webui 本地部署与使用指南
  • OpenClaw 国内 AI 大模型配置教程
  • 豆包 Seedream 4.0 多图融合技术解析与实战测评
  • Python 转义字符详解与常见用法示例
  • stable-diffusion-webui 照片艺术化风格迁移指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online