怎样用Python定时自动爬取行情数据并存入时序数据库

P粉602998670

P粉602998670

2026-04-14

915人浏览

原创

单机轻量任务用 schedule,但需「不丢任务」「跨天运行」「失败重试」时必须用 apscheduler;后者支持持久化、自动续跑、并发控制与可靠触发。

怎样用python定时自动爬取行情数据并存入时序数据库

schedule 还是 APScheduler?别选错启动方式

直接上结论:单机轻量任务用 schedule 足够,但只要涉及「不丢任务」「跨天持续运行」「失败重试」,必须换 APScheduler。前者只是 while 循环+sleep,进程一挂就停;后者自带 jobstore 持久化(比如存到 SQLite 或 Redis),重启后能续跑。

常见错误是拿 schedule 去跑每日 9:15 的开盘抓取——某次网络超时导致主循环卡住,后面所有任务全漏。而 APSchedulerBackgroundScheduler 配合 SQLAlchemyJobStore 可以把下次执行时间记进数据库,哪怕 Python 进程崩了,重启后自动补触发。

  • APScheduler 时,trigger='interval' 适合秒级/分钟级行情(如每 30 秒拉一次 tick);trigger='cron' 适合固定时刻(如每天 15:00 存日线)
  • 务必设置 coalesce=Truemax_instances=1,防止网络卡顿导致同一任务堆积并发执行
  • 不要在 scheduler 启动后直接写 while True: time.sleep(3600),改用 block=True 或配合 signal.pause()

requests 抓接口 vs akshare 封装库:数据源稳定性怎么保?

行情接口极不稳定:交易所限流、字段突变、HTTPS 证书更新、User-Agent 黑名单——纯靠 requests 写死 URL 和解析逻辑,一周内大概率报错。推荐分层处理:

  • 优先用 aksharepip install akshare),它已内置多套 fallback 机制,比如 akshare.stock_zh_a_spot_em() 会自动切腾讯/东财/新浪多个源,字段名也做了统一映射
  • 若需定制字段(如 Level2 十档盘口),再自己封装 requests,但必须加三层防护:1)session 复用 + 全局 timeout(timeout=(3, 7));2)Retry 策略(urllib3.Retry 配置 total=3, backoff_factor=1);3)每次请求前检查响应状态码和关键字段是否存在(比如 if 'data' not in res.json() 就跳过解析)
  • 避免用浏览器 User-Agent,换成模拟券商 APP 的 header(如 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)'),部分接口对移动端更宽容

写入 InfluxDB 2.x 时,tag 和 field 别混,否则查不出来

时序数据库不是关系库,measurement 相当于表名,tag 是索引字段(必须字符串,且值不能空),field 才存数值(支持 int/float/bool/string)。爬下来的数据如果把 symbolfield 写进去,后续按股票代码查就是全表扫——性能直接崩。

Python 3.14.2
Python 3.14.2

Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。

下载

正确姿势是:把高频过滤条件(如 symbolexchange)全设为 tag,把行情值(pricevolumebid_price_1)设为 field。InfluxDB 的查询语法里,WHERE 后只能跟 tag,不能查 field

  • Python 写入用 influxdb_clientpip install influxdb-client),别用老的 influxdb 库,v2.x 不兼容
  • 批量写入必须用 WriteApi.write()record 参数传 Point 对象列表,单点写入(循环调 write)吞吐量不到 1/10
  • 注意时间戳精度:InfluxDB 默认纳秒,但行情数据毫秒就够了,构造 Point 时显式调 .time(timestamp_ms, WritePrecision.MS),否则可能被截断或错位

本地测试跑通 ≠ 上生产,Linux 守护进程这三步绕不开

在笔记本上用 python main.py 跑 10 分钟没问题,扔到服务器后台就断连——根本原因是缺少进程管理。systemd 不是可选项,是必选项。

  • /etc/systemd/system/stock-crawler.service,关键项: Restart=always(崩溃自动拉起)、 RestartSec=10(别秒启,留出 DB 连接恢复时间)、 Environment="PYTHONPATH=/opt/crawler"(避免模块找不到)
  • 日志必须重定向:在 service 文件里加 StandardOutput=journalStandardError=journal,然后用 journalctl -u stock-crawler -f 实时看,别写到本地文件再手动轮转
  • 数据库连接池要显式关闭:APScheduler 的 shutdown() 不会自动关掉 InfluxDB 的 client.close(),得在 signal.signal(signal.SIGTERM, ...) 里手动清理,否则 systemd restart 时旧连接堆积导致端口耗尽

真正麻烦的从来不是第一次写入库,而是三个月后某个凌晨发现某只股票数据连续缺了 47 分钟——这时候你得翻 journal 日志、查 jobstore 表里 last_run_time、比对 InfluxDB 的写入延迟监控,才能定位是网络抖动触发了重试上限,还是 tag 值里混进了非法字符(比如 symbol 里有空格)导致整批写入静默失败。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1104

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

2070

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1185

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

8775

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1478

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1550

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

880

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

530

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1111

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PyCharm官方快速入门指南
PyCharm官方快速入门指南

共0课时 | 0人学习

Python函数定义官方教程
Python函数定义官方教程

共0课时 | 0人学习

Python 3.14.6官方文档
Python 3.14.6官方文档

共0课时 | 0人学习