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

30 行 Python 实现公开接口数据抓取与本地存储

介绍使用 Python 脚本抓取公开网页接口数据的完整流程。通过分析浏览器网络请求定位 API 接口,利用 requests 库发送请求,结合 tenacity 处理异常重试与频率限制,最终将数据导出为 CSV 格式。代码包含 User-Agent 随机化、断点续传逻辑及速率控制,旨在演示合规的数据采集技术,强调遵守 robots 协议与版权规范。

片刻发布于 2026/3/30更新于 2026/5/2627 浏览
30 行 Python 实现公开接口数据抓取与本地存储

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

'目标网站'近日上线的新主题合集页采用前端渲染,数据通过 /api/v2/theme/list 接口一次性返回 JSON,无需模拟点击'加载更多'。接口无登录限制,但带 5 秒滑动窗口的 IP 频次校验:单 IP >30 次/分即返回 429。本文示范如何遵守 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(stop=stop_after_attempt(3)) 装饰器,遇到 429 自动退避 10 秒;全局速率 time.sleep(random.uniform(1, 2)),确保平均 <30 次/分。

运行环境: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))
def fetch_one_page(page: int):
    session.headers.update({"User-Agent": ua.random})
    params = {"page": page, "size": PAGE_SIZE}
    resp = session.get(BASE_URL, params=params, timeout=10)
    if resp.status_code == 429:
        raise Exception("Rate limited")
    resp.raise_for_status()
    return resp.json()

def main():
    writer = None
    for p in range(1, MAX_PAGE + 1):
        print(f"[+] 正在抓取第 {p} 页 …")
        js = fetch_one_page(p)
        rows = [{"title": item["title"], "author": item["author"], "coverUrl": item["coverUrl"]} for item in js["data"]["list"]]
        if not writer:
            writer = csv.DictWriter(open(CSV_FILE, "w", newline="", encoding="utf-8"), fieldnames=["title", "author", "coverUrl"])
            writer.writeheader()
        writer.writerows(rows)
        if js["data"]["total"] <= p * PAGE_SIZE:
            break
        time.sleep(random.uniform(*SLEEP_RANGE))
    print(f"[√] 抓取完成,已写入 {CSV_FILE}")

if __name__ == "__main__":
    main()

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

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

目录

  1. 用 30 行 Python 把公开合集数据搬进本地数据库
  2. -- coding: utf-8 --
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • MCP 插件配置实战:browser-tools-mcp 集成指南
  • 30 行 Python 实现公开接口数据抓取与本地图库构建
  • Whisper large-v3 语音识别实测:与 v1/v2 在中文长语音场景的差异
  • Java 主流快速开发框架横评:若依、芋道、JeecgBoot 与 Jeesite
  • Python 量化实战:AKshare 获取全市场金融数据
  • Python 移动端反爬实战:Charles 抓包与 Frida Hook 破解
  • Python 核心语法实战:变量、流程与函数详解
  • Java 多用户网页版聊天室:项目总览与用户及好友管理模块实现
  • 鸿蒙 ArkTS 自动化测试实践:构建全链路缺陷防御体系
  • 空洞卷积(Dilated Convolution)原理与基础架构解析
  • Python 实现空间注意力神经网络(SANN)的设计与实战
  • Openclaw 连接本地 Ollama 及 Qwen WebUI 无响应排查步骤
  • AI 绘画精讲与 AIGC 时代游戏美术设计
  • Python 基础语法完全指南:变量、类型、运算符与字符串处理
  • Python 基础语法完全指南:变量、数据类型与运算符详解
  • C++ 继承机制详解:派生类函数、虚继承与菱形继承案例
  • C++ 继承详解:派生类函数、虚继承原理与菱形继承案例
  • Linux 基础 IO:深入理解文件描述符机制
  • OpenWebUI 集成 SearXNG 实现本地大模型联网搜索
  • 攻防世界 Web 题解(七):SQL 注入、文件上传与命令执行

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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