×

新的研报阅读方法

wang wang 发表于2026-05-11 17:54:17 浏览1 评论0

抢沙发发表评论

新的研报阅读方法

各位股神,大家好!

东方财富网的研报中心提供了大量的证券分析师的研究报告,包括原文。但是通过网页访问,点来点去的影响阅读的连贯性,所以我想有一种办法来将研究报告批量下载下来,在本地电脑上连续阅读。

下载研报的方法我已经改进过多次了。

最初,我按照行业批量下载研报,同时也在B站的小店里提供了个exe工具。但是,后来发现,这种方法很难提个醒我去持续地追踪,经常是想起来就看看,想不起来就不去读了。

然后,我改进了这个方法,我按周批量下载全部的行业研报,大概一周300-500个文件,尝试用1周读完。后来,我发现,工作量还是蛮大的,我就用AI先帮我阅读一遍之后打分,我精选85分以上的研报再读,基本上就能读完了。这样的方法我坚持了大概有3-4个月了吧

刚好最近,有B站网友说最初小店里的工具不能用了。

我就想着刚好再总结下,我这个阅读研报的方法,是否还有可以改进的地方。

当前的方法有两个问题:

1、时效性有点滞后,尤其是后半周,我还在读上一周的研报,信息稍微滞后,比方说海关进出口数据出来以后,往往一两天就有分析师给出自己的分析,但我往往要延迟1个礼拜

2、可能会错过信息。AI的筛选还是并不能完全体现我的意思,可能会错过信息。尤其是,对于我不太关注的行业。

最终,我还是决定,不依靠AI的筛选了,自己来掌握信息的筛选和过滤。

这也就是我刚刚改变的读研报的方法,看看这次能不能坚持下去。

最新的方法是,我按照天下载全部的行业研报,大概一天几十份不等。这样就首先解决了时效性的问题。然后我再自己来决定是精读还是略读,接下来通过时间来验证这个方法合适不合适吧。

至于为什么读行业研报,不读个股研报。

实在是个股研报确实没什么价值。而行业研报能带给我们对新行业业务的理解、各个行业的最新重要资讯、以及分析师独特的行业视角和行业数据。这样的信息密度和价值是其他的方式很难能匹配的。

可能看书的价值高一些,但书籍的时效性和行业覆盖又差了不少。

所以,还是推荐各位股神,开始持续读研报。

最后,说下最新工具的形式。

第二版因为需要用到AI的Token,所以我就没有公开,整个自动化处理的过程也比较复杂。

最新的这个版本,我想着用python脚本的方式做个共享。

之所以,不再提供EXE形式的工具了,是因为,以我几十年电脑使用经验而言,python真的是唯二的对人的能力扩展的工具了,另一个是office。

关于office这个工具,它真的帮助人类极大地提升了处理信息的能力,我用一张照片来举例,王小波,在他短暂的一生中,正是因为他很早就使用电脑写作,才给我们留下了那些经典,你希望生活在没有《黄金时代》和《红拂夜奔》的世界么?

而python又一次扩展了我们与世界联通,处理信息的能力。

我最新工具的脚本粘贴如下:

import requests

import json

import re

import os

def download_pdf_with_retry(info_codeheadersfilenameindustry_codemax_retries=3):

ifos.path.exists(filename):

return True

detail_url f'https://data.eastmoney.com/report/zw_industry.jshtml?infocode={info_code}'

for attempt in range(1, max_retries 1):

try:

resp =requests.get(detail_url, headers=headers, timeout=10)

match = re.search(r'"attach_url"\s*:\s*"([^"]+)"', resp.text)

if not match:

print(f"⚠️ 未找到 PDF 链接(尝试 {attempt}/{max_retries}{info_code}")

time.sleep(1)

continue

pdf_url=match.group(1)

pdf_resp = requests.get(pdf_url, headers=headers, timeout=15)

os.makedirs(os.path.dirname(filename), exist_ok=True)

with open(filename, 'wb'as f:

f.write(pdf_resp.content)

return True

except Exception as e:

print(f"❌ 下载失败(尝试 {attempt}/{max_retries}{str(e)[:100]}")

time.sleep(2)

return False

def get_list_by_day(day):

url 'https://reportapi.eastmoney.com/report/list'

headers = {

'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',

'Referer''https://www.eastmoney.com/',

}

params = {

'cb''datatable7190919',

'industryCode''*',

'pageSize''100',

'industry''*',

'rating''*',

'ratingChange''*',

'beginTime': day,

'endTime': day,

'pageNo''1',

'fields''',

'qType''1',

'orgCode''',

'rcode''',

'p''2',

'pageNum''2',

'pageNumber''',

'pageNumber''2',

'_':"1778441285086"

}

params['beginTime'= day

params['endTime'= day

response = requests.get(url, headers=headers, params=params)

json_data =re.findall(r'datatable7190919\((.*)\)', response.text, re.DOTALL)[0]

json_data = json.loads(json_data)

page_no = json_data['pageNo']

data = json_data['data']

if page_no == 1:

return data

else:

for i in range(2, page_no+1):

params['pageNo'str(i)

response = requests.get(url, headers=headers, params=params)

json_data =re.findall(r'datatable7190919\((.*)\)', response.text, re.DOTALL)[0]

json_data = json.loads(json_data)

data.extend(json_data['data'])

return data

def get_pdf_by_day(day):

data = get_list_by_day(day)

for item in data:

item['title'= item['title'].replace('/''_')

headers = {

'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',

'Referer'f'https://www.eastmoney.com/',

}

for item in data:

if os.path.exists(f'./pdf_by_day/{day}/{day}_{item["industryName"]}_{item["title"]}.pdf'):

continue

download_pdf_with_retry(info_code=item['infoCode'], filename=f'./pdf_by_day/{day}/{day}_{item["industryName"]}_{item["title"]}.pdf'headers=headers,industry_code=item['industryCode'])

if __name__ == '__main__':

day '2026-05-08'

get_pdf_by_day(day)

你只需要将这些代码粘贴给AI,然后问问,我该如何运行这个脚本,AI会带你打开连接世界的大门。