[应用开发] 东方财富网研报自动下载脚本

[应用开发] 东方财富网研报自动下载脚本

[应用开发] 东方财富网研报自动下载脚本 [应用开发] 东方财富网研报自动下载脚本 Modified December 10, 2025 4875 5278 Code block Python print(value list) 遍历所有页的数据 for f in range(1, TotalPage + 1): data frist = page data(str(f), start date, end date) value list = data frist.get('data', []) for data end in value list: down load(data end) 下载每一篇报告 这样就正常运行了 本地会根据日期新建文件夹,重命名,安好日期分类存储 V1.1 更新 关键词过滤 之前群里有定向搜索需求,增加了关键词过滤功能,调整关键词(可以自由增加减少)只下载匹配的报告。 Code block Bash Version 1.1 import os import time import requests import random import json from datetime import datetime, timedelta from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry 获取当前时间戳 time1 = time.time() time2 = int(time1) print(f"当前时间戳: {time2}") def re name(excel name): 去除名字中的特殊符号 sets = ['/', '\\', ':', ' ', '?', '"', '<', ' ', '|'] for char in excel name: if char in sets: excel name = excel name.replace(char, '') return excel name 设置 User Agent 列表 my headers = [ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10 9 2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36", ... (其他 User Agent) ] headers = {'User Agent': random.choice(my headers)} def get page(url): 封装下载页面方法 session = requests.Session() retry = Retry(connect=3, backoff factor=0.5) adapter = HTTPAdapter(max retries=retry) session.mount('http://', adapter) session.mount('https://', adapter) try: response = session.get(url, headers=headers, timeout=10) if response.status code == 200: return response.content.decode("utf 8") 应对乱码 else: print(f"请求失败,状态码: {response.status code}") return None except requests.exceptions.SSLError as e: print(f"SSL错误: {e}") return None except requests.exceptions.RequestException as e: print(f"请求异常: {e}") return None def down load(data end): try: excel name = data end['title'] excel organ = data end['orgSName'] industryName = data end['industryName'] down loadurl = f"https://pdf.dfcfw.com/pdf/H3 {data end['infoCode']} 1.pdf" excel name = re name(excel name) excel organ = re name(excel organ) industryName = re name(industryName) 使用 os.path.join 来拼接路径 local folder = os.path.join(os.getcwd(), "reports") 将所有报告存储在 "reports" 文件夹中 file name = f"{industryName} {excel name} {excel organ}.pdf" 文件名不包含日期 full path = os.path.join(local folder, file name) 创建文件夹(如果不存在) os.makedirs(local folder, exist ok=True) 检查文件是否已经存在 if os.path.isfile(full path): print(f"文件已存在,跳过下载: {full path}") return 如果文件已存在,跳过下载 下载并保存文件 with open(full path, 'wb') as code: download pdf = requests.get(down loadurl, headers=headers, timeout=10) if download pdf.status code == 200: code.write(download pdf.content) print(f"文件已保存为: {full path}") else: print(f"下载失败,状态码: {download pdf.status code},URL: {down loadurl}") except AttributeError: print('报告数据缺少必要的字段') except Exception as e: print(f"下载文件时出错: {e}") 获取报告列表的函数,支持指定日期范围 def page data(pageno num, start date, end date): num random 7 = random.randint(1000000, 9999999) pageno = pageno num 生成请求URL,使用指定的日期范围 html url = f'https://reportapi.eastmoney.com/report/list?cb=datatable{num random 7}&industryCode= &pageSize=50&industry= &rating= &ratingChange= &beginTime={start date}&endTime={end date}&pageNo={pageno}&fields=&qType=1&orgCode=&code= &rcode=& ={time2}' html = get page(html url) if html: try: html1 = html.strip(f'datatable{num random 7}(') html2 = html1.rstrip(')') 去掉字符串字段 data frist = json.loads(html2) return data frist except json.JSONDecodeError as e: print(f"JSON解析错误: {e}") return {} else: return {} 定义关键词列表 KEYWORDS = ['AI', '人工智能'] 替换为目标关键词,按同样格式添加或者删除 设置起始日期和结束日期(格式:YYYY MM DD) start date = "2024 11 22" 替换为所需的起始日期 end date = "2024 12 14" 替换为所需的结束日期 主执行流程 data frist = page data(str(1), start date, end date) if not data frist: print("未获取到任何数据。") exit() value list = data frist.get('data', []) TotalPage = data frist.get('TotalPage', 1) print(f"总页数: {TotalPage}, 当前页获取到的报告数量: {len(value list)}") 遍历所有页的数据 for f in range(1, TotalPage + 1): print(f"正在处理第 {f} 页,共 {TotalPage} 页...") data frist = page data(str(f), start date, end date) if not data frist: print(f"第 {f} 页未获取到数据,跳过。") continue value list = data frist.get('data', []) print(f"第 {f} 页获取到的报告数量: {len(value list)}") for data end in value list: title = data end.get('title', '').lower() if any(keyword.lower() in title for keyword in KEYWORDS): print(f"匹配关键词,准备下载报告: {title}") down load(data end) 下载每一篇符合条件的报告 else: print(f"跳过不匹配关键词的报告: {title}") V1.2 打包了个Win本地运行程序(免安装) 直接运行,UI输入日期,关键词,保存路径就行了 ReportDownloader.exe 37.93MB 百度云下载: 链接: https://pan.baidu.com/s/1fR9PsrndIPU6gieLCvGoWQ?pwd=vaxb 这样就正常运行了 本地会根据日期新建文件夹,重命名,安好日期分类存储 V1.1 更新 关键词过滤 之前群里有定向搜索需求,增加了关键词过滤功能,调整关键词(可以自由增加减少)只下载匹配的报告。 V1.2 打包了个Win本地运行程序(免安装) 直接运行,UI输入日期,关键词,保存路径就行了 ReportDownloader.exe 37.93MB ReportDownloader.exe 37.93MB 百度云下载: 链接: https://pan.baidu.com/s/1fR9PsrndIPU6gieLCvGoWQ?pwd=vaxb 📌 作者:吵爷 基于CSDN的文章 + ChatGPT o1修改,运行脚本,会在本地根据报告的日期生成文件夹,下载所有的行业研报。脚本直接运行,文件会存储到python脚本对应目录下命名为“reports”的文件夹,有需要可以自行修改。 注意:爬虫本身并不违法,但抓取的研报有合理的使用范围,禁止用爬虫下载的报告/数据用于商业变现等用途。本脚本仅用于个人学习使用。 作者:吵爷 基于CSDN的文章 + ChatGPT o1修改,运行脚本,会在本地根据报告的日期生成文件夹,下载所有的行业研报。脚本直接运行,文件会存储到python脚本对应目录下命名为“reports”的文件夹,有需要可以自行修改。 注意:爬虫本身并不违法,但抓取的研报有合理的使用范围,禁止用爬虫下载的报告/数据用于商业变现等用途。本脚本仅用于个人学习使用。 这个数据库里的所有券商报告: V1.0 初始版本

在 小宇宙note 阅读完整内容