ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python实战:同花顺数据获取与问财选股接口全解析

Python实战:同花顺数据获取与问财选股接口全解析 做量化研究这几年我前前后后用过不少数据源Tushare、AkShare、Wind、聚宽各有各的优势但有一个高频出现的需求始终绕不开——同花顺的数据。尤其是它的资金流数据、概念板块异动、龙虎榜信息以及问财这种极其灵活的自然语言选股能力在别的平台上要么收费要么字段不全。所以很长一段时间里我的做法都是曲线救国用Python从同花顺各个公开入口把数据搬回本地。这篇文章把我的完整实操经验整理出来覆盖同花顺数据获取的几种主流技术路线、环境准备、具体代码实现以及我踩过的大大小小的坑。无论你是刚入门想搭一套自己的选股数据池还是已经在做量化和策略回测这份笔记应该都能帮你省下不少折腾时间。1. 先盘一盘同花顺的数据到底有哪几种“拿法”1.1 官方路线iFinD金融终端如果资金充裕最直接的方案是开通同花顺iFinD金融数据终端。这是同花顺官方推出的机构级数据服务覆盖行情、财务、宏观、行业、资金流等几乎全维度数据。Python通过iFinD的SDK可以直接调用数据规范、字段完整、更新及时还有专门的客服支持。但iFinD的门槛也很现实它是收费的而且价格不低。对于个人投资者、独立开发者或者学生来说这个方案成本太陡了。我自己也是先在网上找各种试用机会后来发现对于个人策略研究非官方路线的数据质量已经够用于是就把重点放在了下文这些方案上。1.2 大众路线网页端公开数据接口与问财同花顺网页端实际上暴露了大量公开数据接口比如个股资金流向、涨停板行情、概念板块资金、龙虎榜等这些接口本质上就是网页背后的Ajax请求返回的是JSON或者HTML片段。用Python的requests库模拟浏览器请求完全可以拿到结构化数据。另一条更特殊的路子是同花顺的问财服务。它允许用户用自然语言搜索股票比如近5日主力资金净流入超过1亿且市值小于200亿的股票问财会返回符合条件的股票列表和相应指标。这个能力非常适合做中长线股票筛选和策略初筛而且也是可以通过爬虫调用的。后面我会详细演示这两条路线的完整代码。2. 开工前准备环境、依赖库与选型逻辑2.1 Python环境与编辑器无论你用Windows、macOS还是LinuxPython 3.8以上版本都建议优先配置。日常爬取和数据分析用得上核心库的版本比较新老版本容易出兼容问题特别是遇到SSL和编码的坑时新版本会省心很多。编辑器方面如果你只是在命令行跑脚本那用系统自带编辑器就够了。但如果要做数据探索、边写边调试我强烈建议用VSCode或者PyCharm。VSCode配合Python插件可以做断点调试、查看变量、一步步观察请求返回的数据结构这在调试同花顺接口时几乎每天都用得到。网上很多人搜索vscode配置python其实核心就是装好Python插件、选择正确的解释器路径不需要太多花哨配置。2.2 三个核心Python库环境里建议预装这几个库后续全部会用到requests发起HTTP请求的主力库支持Session会话保持、Cookie携带、自定义Header。pandas拿到数据后的清洗、筛选、合并、透视都靠它几乎是Python数据分析的标准配置。pywencai第三方封装库把问财的网页接口封装成了Python函数一行代码就能把自然语言选股结果拉回本地。easytrader如果你做的是研究模拟交易一体的工作流这个库可以用来对接券商客户端做模拟操作。不过注意它跟同花顺的数据获取是两回事很多人把它当成数据源来用这是个误区。2.3 为什么是这些库选型逻辑其实很直观requests是基础不用多说pandas是数据处理的标配pywencai能极大简化问财接口的对接复杂度——它自动处理了cookie、参数封装、数据解析省去了手工逆向接口的时间easytrader则解决了选完股之后怎么办的问题。当然如果你后续需要更底层的行情数据比如分钟线、盘口快照可能还要引入诸如pytdx这类基于通达信协议的库。不过那已经超出同花顺的范畴了后面有机会单独写一篇。核心原则是先明确你要取的是选股结果还是行情快照再决定用什么库不要一上来就堆一堆工具。3. 实战从零到一把同花顺数据搬进本地3.1 方式一问财接口抓取全流程问财是同花顺旗下非常有意思的智能选股平台它解决了一个长期痛点过去你要写SQL、调接口、处理各种参数才能完成按条件选股而在问财里你只需要敲一句人话比如连续三年ROE大于15%且2023年净利润同比增长超过20%的股票它就能返回结果。直接爬问财的网页端难点在于它有不少动态渲染和参数加密逻辑。但我们可以用pywencai这个封装库来绕开大部分复杂度。安装非常简单# 安装命令在终端执行 pip install pywencai调用示例import pywencai res pywencai.get( query2024年一季报净利润同比增长超过30%的股票, query_typestock, sort_column净利润同比增长率, sort_orderdesc, page1, per_page100 ) print(res.head(10))执行后pywencai会返回一个pandas DataFrame列名就是问财页面上的指标名比如股票代码、股票简称、净利润同比、市盈率、总市值等。整个过程不到10行代码却相当于自动完成了一次完整的选股逻辑。这里有一个非常实用的技巧问财支持把多个条件用且或连接而不只是单一条件。所以你可以把策略的逻辑一步步拆成自然语言最终拼成一个复杂查询。比如query ( 2024年一季报净利润同比增长超过30% 且 市盈率小于30 且 总市值在100亿到500亿之间 且 所属行业为计算机应用 ) res pywencai.get(queryquery, query_typestock)这个能力在手工选股时代几乎不可能实现现在却只要一行配置文件就能搞定。但要注意问财返回的数据量存在上限如果你一次拉取的记录特别多建议分页获取或者用更细的条件切分成多段查询再在本地合并。3.2 方式二同花顺网页数据接口解析除问财外同花顺的行情中心还有大量公开接口。最典型的是个股资金流数据链接类似https://data.10jqka.com.cn/funds/ggzjl/后面跟着分页、排序参数。用Python直接请求这个页面会拿到一个HTML页面里面嵌着表格数据。直接用requests请求import requests url https://data.10jqka.com.cn/funds/ggzjl/field/tradezdf/order/desc/page/1/ajax/1/free/1/ headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36, Referer: https://data.10jqka.com.cn/funds/, } resp requests.get(url, headersheaders, timeout10) resp.encoding gbk print(resp.text[:2000])注意两个关键点第一resp.encoding必须手动指定为gbk因为同花顺网页端还在用GBK编码默认UTF-8解析出来全是乱码第二Headers里的Referer字段不能省很多金融数据网站的接口会做来源校验不带Referer直接返回403。拿到HTML之后用pandas.read_html可以直接把表格读成DataFrameimport pandas as pd tables pd.read_html(resp.text) if tables: df tables[0] print(df.head())这个方法虽然简单但也有局限页面能展示的条数有限翻页逻辑有时候需要额外处理。如果只是想快速看某个板块的资金流排名这招足够用但如果你要跑几年的历史数据还是建议用问财接口或者数据库存储方案。3.3 方式三用pywencai和easytrader这类库做二次封装实际项目中我不会每次都写长串请求代码而是会把问财查询和行情中心接口封装成一个本地工具模块方便策略代码反复调用。下面我给你看一个最小可用的封装示例import pywencai import pandas as pd class TongHSC: 同花顺数据接口轻量封装 def __init__(self): self.user_agent Mozilla/5.0 ... def wencai_query(self, query: str, page: int 1, per_page: int 100) - pd.DataFrame: 通过问财查询选股结果 res pywencai.get( queryquery, query_typestock, pagepage, per_pageper_page, ) if res is None: return pd.DataFrame() if isinstance(res, dict): return pd.DataFrame(res) return res def fund_flow_top(self, page: int 1) - pd.DataFrame: 获取个股资金流排名 import requests url ( https://data.10jqka.com.cn/funds/ggzjl/ ffield/tradezdf/order/desc/page/{page}/ajax/1/free/1/ ) headers { User-Agent: self.user_agent, Referer: https://data.10jqka.com.cn/funds/, } resp requests.get(url, headersheaders, timeout10) resp.encoding gbk tables pd.read_html(resp.text) return tables[0] if tables else pd.DataFrame()有了这个类之后你的策略脚本和其它模块就可以非常干净地调用两个核心能力了。你甚至可以把查询结果直接落进CSV或者数据库形成自己的本地因子库。3.4 数据的清洗、标准化与存储拿到数据只是第一步清洗和存储往往才是真正决定能不能用的关键。问财返回的DataFrame列名大多是中文比如股票代码股票简称净利润同比增长率。不同列的类型不一定统一有的列是字符串有的列是浮点数还有百分比字段带着%符号。在入数据库前我会统一做一遍类型转换def clean_wencai_df(df: pd.DataFrame, numeric_cols: list) - pd.DataFrame: for col in numeric_cols: if col in df.columns: df[col] ( df[col] .astype(str) .str.replace(%, ) .str.replace(,, ) .astype(float) ) df[股票代码] df[股票代码].astype(str).str.zfill(6) return df代码里的zfill(6)是把1补齐成000001保证代码格式统一后面做关联匹配时就不会踩坑。存储方面小规模数据存CSV、中规模数据存SQLite、大规模数据建议存PostgreSQL或MySQL。我个人的习惯是单次查询结果直接当CSV缓存历史因子库用SQLite起步等数据量大了再迁移到独立数据库服务。这样既能快速迭代又不至于一开始就陷入运维负担。4. 踩坑合集我在同花顺接口实战中遇到的5个问题4.1 反爬与频率限制这是最容易踩的坑。同花顺网页端的接口虽然没有特别强的反爬但如果你频繁请求、并发太高很容易被服务端临时封IP。解决办法有几个维度降低请求频率建议每次请求间隔至少1秒最好用time.sleep(random.uniform(1, 3))做随机延时避免固定节奏被识别。轮换User-Agent简单地从几个常见的浏览器UA里随机切换能有效降低被拦的概率。使用Session保活用requests.Session()保持cookie第一次请求先去访问首页获取必要cookie后续请求带上这个session被拒绝的概率会小很多。4.2 字段缺失与口径不一致问财返回的字段有时候会缺失特别是你筛选的指标在某只新股里还没有值时对应的字段会变成NaN。这不算程序bug但会直接影响策略计算。我建议在清洗阶段用fillna统一处理是填0还是填上一个交易日的数据要根据具体指标语义来判断不能一刀切。另一个大坑是复权口径。你从问财拿到的历史行情里价格是前复权、后复权还是不复权不同接口可能给出不同的结果。在量化回测里这会导致巨大偏差。所以拿到数据后一定要先确认口径最好在入库时增加一个复权类型的字段把数据来源标注清楚。4.3 编码与超时问题同花顺很多老接口是GBK编码requests如果不手动指定会默认用ISO-8859-1或UTF-8去解码结果一团乱码。所以每一个涉及同花顺旧接口的请求我基本都会加上resp.encoding gbk。另外接口偶尔会响应很慢务必给请求设置timeout比如timeout10否则网络抖动时脚本会卡死在等待状态整个调度任务直接停摆。4.4 问财查询的隐式限制问财不会告诉你它的隐式规则比如某些过于复杂的多条件查询会返回空结果某些超长的查询语句会被截断。遇到这种情况我的排查方法是先用网页版问财手动搜一次看能不能出结果。如果能出结果但代码搜不到多半是查询条件太多需要拆分成多个简单查询再合并。此外问财对结果条数也有隐含上限一次拿一万条基本不现实分页加多段查询才是正道。4.5 合规边界与数据使用建议最后这一点说重要也重要说容易被忽略也真的容易被忽略。同花顺网页公开数据可以用来做个人学习、研究和技术探索但大规模抓取和商业化用途都需要谨慎评估合规风险。我自己在实际项目里会给所有抓取任务设置合理的频率并优先使用官方接口或者明确允许访问的公开接口。做策略研究没问题但要尊重平台的服务条款和数据版权不把数据用于违法或侵犯他人权益的场景。5. 从应用到扩展这套数据接口还能做什么数据接口的价值不只是做选股。有了标准化数据池之后你可以在此基础上做很多延展每日定时抓取个股资金流、板块异动数据配合定时任务构建自己的市场情绪指标。把问财选股结果接入消息通知邮件、微信等形成早盘自动选股、盘中提醒异动的实用工具。结合历史因子做回测验证主力资金净流入低市盈率这类组合条件在长期是否有效。我个人的体会是同花顺的数据接口体系相比专业级终端胜在免费、直接、覆盖面广非常适合个人研究者快速验证想法。但前提是你得先把数据管道做稳把清洗逻辑打磨好。这一步做完后面所有策略开发都会顺畅很多。最后再分享一个小技巧把常用查询词整理成配置文件不要散落在代码里每次需要调整条件时只修改配置文件代码完全不用动。这样你的选股体系会越来越像一个内部量化研究平台而不是一堆一次性脚本。整个流程搭建好后后续新增策略条件花的时间基本可以忽略不计。
返回列表