本来的作用是用来获取板块概念,附带部分有流通信息,可以自行修改问财询问的信息来改变获取内容。基本只能有时间时候使用,因为轮询约1min-2min(单页sleep这里设定是2s),读取约0.5s。可以自行编写自动获取网页cookie,我这里只是说明了最基础的手动设置cookie的方式。(可以用于遍历获取名称,流通,概念,但竞价时候很难作为获取竞价数据的来源)
步骤:
1、pip install pywencai。
2、打开pywencai网页,登录ths账号,f12 打开html解析窗口,f5刷新后,点击窗口上方network,下面all,最左边最开始的name列,点击进去,requests header下面,找到cookie,复制下来填到cookie,从而获取网页cookie。
3、使用配置parquet存储位置,并使用下列代码。
代码区域:
BASE_
PATH = Path(r‘‘)
COOKIE =
P[gguba]ATH_C[/gguba]ACHE = BASE_PATH / ‘cache‘ / ‘wencai_raw.parquet‘
# --- pywencai 参数配置 ---
WENCAI_QUERY = "所有A股的概念板块" #可自行修改需要获取的内容,可以自己看一下。
WENCAI_SLEEP = 2
WENCAI_
LOOP = True
# --- 数据处理配置 ---
PARQU[gguba]ET_E[/gguba]NGINE = ‘pyarrow‘
PARQU[gguba]ET_C[/gguba]OMPRES
SION = ‘snappy‘
def download_wencai_data():
"""
下载问财原始数据并保存
流程:
1. 验证 Cookie 配置
2. 配置日志过滤器(只显示页码进度)
3. 调用 pywencai.get 批量下载
4. 保存为 parquet 格式
Returns:
bool: 下载成功返回 True,失败返回 False
"""
# --- 0. Cookie 验证 ---
if not COOKIE or COOKIE.strip() == "":
print("❌ 错误:未配置 Cookie")
return False
# --- 1. 配置 pywencai 日志过滤器(只显示页码进度)---
pywencai_logger = logging.getLogger(‘pywencai‘)
pywencai_logger.setLevel(logging.
INFO)
pywencai_logger.handlers.clear()
handler = logging.StreamHandler()
last_page = [0]
def page_filter(record):
"""只保留 ‘第X页成功‘ 信息"""
msg = record.getMessage()
if ‘页成功‘ in msg:
try:
page_num = int(msg.split(‘第‘)[1].split(‘页‘)[0])
if page_num > last_page[0]:
last_page[0] = page_num
record.msg = f"\r [下载进度] 第 {page_num} 页完成"record.args = ()
return True
except:
pass
return False
handler.addFilter(page_filter)
handler.setFormatter(logging.Formatter(‘%(message)s‘))
pywencai_logger.addHandler(handler)
pywencai_logger.propagate = False
download_start = time.time()
print(f" 从问财下载中(预计58页,每页间隔{WENCAI_SLEEP}秒)...")
try:
# --- 2. 批量获取数据 ---
df_raw = pywencai.get(
query=WENCAI_QUERY,
cookie=COOKIE,
loop=WENCAI_LOOP,
sleep=WENCAI_SLEEP,
log=True
)
if df_raw is None or df_raw.empty:
print("\n❌ 数据获取失败")
return False
download_time = time.time() - download_start
# --- 3. 保存原始数据(PyArrow 引擎 + Snappy 压缩)---
PATH_CACHE.parent.mkdir(parents=True, exist_ok=True)
df_raw.to_parquet(PATH_CACHE, engine=PARQUET_ENGINE, compression=PARQUET_
COMPRESSION)
print(f"\n 下载完成: {len(df_raw)}行, 耗时: {download_time:.1f}秒")
return True
except Exception as e:
print(f"\n❌ 下载失败: {e}")
return False