New Chat
Ctrl
K
  • Websites
  • Docs
  • Slides
  • Sheets
  • Deep Research
Kimi Code Kimi Claw
Chat History
Mobile App
  • About Us
    • Visit Moonshot AI
    • Open Platform
    • Features
    • Terms of Service
    • Privacy Policy
  • Language
  • User Feedback

整理 A 股休市日期数据

抓取并整理 A 股节假日等特殊休市日期。 可抓取交易所的通知来获取数据。上交所、深交所选择一个即可。它们的休市安排是一模一样的。 上交所的休市通知,汇总页面为 https://www.sse.com.cn/disclosure/dealinstruc/closed/ 你可以找到各年的通知页面。 整理的结果保存到 csv 文件中,每年对应一个 csv 文件。csv 示例数据如下: ```csv date,is_trading_date,reason 2025-01-01,0,"周五,元旦放假" ``` 必须包含 3 个字段,`is_trading_date` 字段的值只能为 0 或者 1,0 表示非交易日。 csv 文件中,只需保存 `is_trading_date` 为 0 的且非周六周日的日期。 休市通知也保存下来,每年一个 markdown 文件。 对于每个通知,要保存 url,标题,内容。格式如下: ```markdown # {通知} {url} {通知内容} ```
上交所A股休市日期抓取与导出
用户要求我抓取 A 股节假日休市日期数据。我需要:
  1. 访问上交所的休市通知汇总页面:https://www.sse.com.cn/disclosure/dealinstruc/closed/
  2. 找到各年的通知页面
  3. 抓取休市日期数据
  4. 整理成 CSV 文件,每年一个文件
  5. 保存通知内容为 markdown 文件,每年一个文件
让我先访问这个页面看看。
我来帮你抓取 A 股节假日休市日期数据。首先访问上交所的休市通知汇总页面。
Browse
https://www.sse.com.cn/disclosure/dealinstruc/closed/
点击链接查看全部历史公告
页面显示了年度休市安排,我看到有 2026 年的休市安排,还有相关公告列表。我需要点击"相关公告"的链接来查看所有历史通知。让我点击链接 [26]。
页面显示了休市安排信息。我需要查看所有历史通知,让我点击"相关公告"链接。
Click element
收集公告链接并翻页获取更多
现在我看到了公告列表页面,显示了多个年份的休市通知。我看到有分页,需要翻页来获取更多历史通知。让我先获取当前页面的所有通知链接,然后翻页获取更多。
我看到有 2026、2025、2024 年的通知,还有 2023-12-26 的通知标题没有链接显示。我需要翻页查看更多历史通知。
让我先收集当前页面的所有通知 URL,然后翻页获取更多。
看到了公告列表,有分页。让我翻页查看更多历史通知。
Failed to click element
Think
让我滚动页面看看是否有更多元素。
Scroll down webpage
Think
现在我能看到分页按钮了。我需要点击第2页来查看更多历史通知。
现在能看到分页按钮了。让我点击第2页查看更多历史通知。
Click element
Think
第二页显示了 2023、2022、2021 年的通知。让我继续翻页查看更多历史通知。
看到了 2023、2022、2021 年的通知。让我继续翻页查看更多历史数据。
Click element
Think
第三页显示了 2021、2020、2019 年的通知。让我继续翻页查看更多历史数据。
看到了 2021、2020、2019 年的通知。让我继续翻页。
Click element
Think
第四页显示了 2019、2018、2017 年的通知。让我继续翻页查看更多历史数据。
看到了 2019、2018、2017 年的通知。让我继续翻页。
Click element
Think
第五页显示了 2016、2015、2014 年的通知。让我继续翻页查看最后一页。
看到了 2016、2015、2014 年的通知。让我查看最后一页。
Click element
抓取通知生成休市日期CSV
最后一页显示了 2014、2013 年的通知。现在我了解了所有历史通知的范围(2013-2026年)。
现在我需要编写代码来:
  1. 抓取所有通知的详细内容
  2. 解析出休市日期
  3. 生成 CSV 文件和 Markdown 文件
让我先回到第一页,然后用 Python 来批量抓取所有通知的 URL 和内容。由于通知页面较多,我可以用 requests 来更高效地获取所有通知链接。
已经浏览完所有页面,通知范围从 2013 年到 2026 年。现在让我用 Python 批量抓取所有通知的详细内容和休市日期。
Execute Python code
重新使用浏览器工具获取页面源码
看来页面的 HTML 结构和我预期的不一样。让我重新分析页面结构,使用浏览器工具来获取页面源码。
Execute Python code
获取所有通知链接并逐页抓取详情
现在我找到了通知链接。让我获取所有页面的通知链接,然后逐一访问每个通知页面获取详细内容。
Execute Python code
Think
只获取到了第一页的通知。让我检查其他页面的 URL 格式是否正确。
Execute Python code
Think
看来分页 URL 格式不对。让我查看页面源码中的分页链接。
Execute Python code
Think
原来分页 URL 格式不对。让我重新访问第一页,查看分页链接的正确格式。
Browse
https://www.sse.com.cn/disclosure/dealinstruc/closed/list/
通过浏览器翻页获取所有动态加载的通知列表页面链接
看来分页可能是通过 JavaScript 动态加载的。让我尝试使用不同的方法来获取所有通知。我可以使用搜索或者直接访问公告列表的其他页面。
让我尝试通过浏览器翻页并获取每页的通知链接。
Scroll down webpage
requests 遍历通知页面获取详情
现在我可以看到分页按钮了。让我使用 Python 来遍历所有页面,通过模拟点击或使用 JavaScript API 来获取所有通知。但更简单的方法是直接使用 requests 访问每页的数据接口。
让我先尝试获取所有页面的通知 URL,然后逐一访问每个通知页面获取详细内容。
Execute Python code
抓取动态分页通知的多种方法
看来网站的分页可能是通过 JavaScript 动态加载的。让我尝试通过其他方式获取所有通知,比如使用浏览器自动化翻页获取所有通知链接。或者,我可以使用上交所的搜索功能或 API 来获取所有通知。
让我尝试使用不同的 URL 格式来访问其他页面。
Execute Python code
使用浏览器遍历分页获取通知链接
这个接口没有返回数据。让我尝试使用浏览器来遍历所有分页,获取所有通知的链接。
Browse
https://www.sse.com.cn/disclosure/dealinstruc/closed/list/
Python 解析分页获取通知
让我尝试使用 Python 直接获取所有页面的通知。由于分页可能是通过 JavaScript 动态加载的,我需要找到正确的分页 URL 格式。让我查看页面源码中的分页链接。
Execute Python code
上交所公告分页 URL 解析方案
看来分页链接是通过 JavaScript 动态生成的。让我尝试使用其他方法来获取所有通知。我可以使用上交所的公告搜索功能或直接访问公告列表的其他页面。
让我尝试通过浏览器翻页获取所有通知链接,或者使用 Python 的 Selenium 来模拟浏览器操作。但由于这里只能使用 requests,让我尝试找到分页的 URL 格式。
Execute Python code
浏览器翻页抓取所有通知链接
看来页面内容是通过 JavaScript 动态加载的。让我尝试使用浏览器来翻页并获取所有通知链接。
Scroll down webpage
Think
让我点击第2页来获取更多通知链接。
Click element
遍历页面获取所有通知链接
现在我能看到第2页的通知了。让我继续翻页获取所有通知链接。我需要遍历所有页面来获取所有通知的 URL。
Execute Python code
JS 加载内容 翻页抓取通知链接
看来需要通过 JavaScript 加载内容。让我尝试使用浏览器翻页获取所有通知链接,然后用 Python 处理。
Execute Python code
Think
让我继续添加更多通知,然后获取每个通知的详细内容。
Execute Python code
Think
继续添加第5、6页的通知。
Execute Python code
抓取休市通知生成 CSVMD
现在我已经整理了所有 80 条休市通知。接下来我需要:
  1. 访问每个通知页面获取详细内容
  2. 解析出休市日期
  3. 生成 CSV 文件和 Markdown 文件
让我先获取一个通知的详细内容,看看页面结构。
Execute Python code
解析休市日期生成CSV与MD
内容获取成功了。现在我需要解析内容中的休市日期,并生成 CSV 文件和 Markdown 文件。让我继续完善代码。
Execute Python code
解析休市日期生成CSV文件
内容获取成功了。现在我需要解析内容中的休市日期,并生成 CSV 文件和 Markdown 文件。让我继续完善代码,解析休市日期。
Execute Python code
Think
解析函数有问题。让我重新调整解析逻辑。
Execute Python code
Think
正则表达式有问题。让我检查一下匹配结果。
Execute Python code
Think
问题找到了,是中文括号的编码问题。让我修正正则表达式。
Execute Python code
获取通知解析休市生成CSV
解析成功了。现在我需要获取所有通知的详细内容,解析休市日期,然后生成 CSV 文件和 Markdown 文件。让我继续完善代码。
Execute Python code
Think
数据获取完成了。现在我需要去重并生成 CSV 文件和 Markdown 文件。
Execute Python code
Think
数据看起来正确。现在我需要生成 CSV 文件和 Markdown 文件。
Execute Python code
Think
CSV 文件生成完成了。现在我需要生成 Markdown 文件,保存通知内容。
Execute Python code
Think
文件生成完成了。让我验证一下生成的文件内容是否正确。
Execute Python code
Think
文件生成正确。让我列出所有生成的文件。
Execute Python code
检查2024年休市日期数据完整性
数据抓取和整理完成了。让我再检查一下 2024 年的数据,因为之前有一个通知解析到 0 个休市日期。
Execute Python code
修复单独日期休市解析函数逻辑
我发现问题了。2024 年端午节是 6 月 10 日(星期一)单独休市,但我的解析函数只处理日期范围(有"至"的),不处理单独日期。让我修复这个问题。
Execute Python code
Think
还是有问题。让我调试一下正则表达式。
Execute Python code
Think
正则表达式还是有问题。让我使用更简单的正则。
Execute Python code
修复节假日名称提取错误并提升解析精度
现在可以解析单独日期了。但是节假日名称没有正确提取。让我修复这个问题。
Execute Python code
Think
现在数据更完整了。让我重新生成 CSV 文件和 Markdown 文件。
Execute Python code
Think
数据更完整了。现在让我重新生成 CSV 文件和 Markdown 文件。
Execute Python code
Think
CSV 文件生成完成了。现在让我重新生成 Markdown 文件。
Execute Python code
Think
文件生成完成了。让我验证一下生成的文件内容。
Execute Python code
列出已生成文件的完整列表
数据现在正确了。2024 年端午节(6 月 10 日)已经被正确添加到 CSV 文件中。让我列出所有生成的文件。
Execute Python code
Think
数据抓取和整理完成了。让我再验证一下 Markdown 文件的格式是否符合要求。
Execute Python code
Think
Markdown 文件格式正确。现在让我列出所有生成的文件路径。
Execute Terminal
List output directory files
Think
所有文件都已生成。让我总结一下完成的工作。
Execute Python code
Think
任务完成了。我已经成功抓取了上交所的 A 股节假日休市日期数据,并整理成 CSV 文件和 Markdown 文件。
已完成 A 股节假日休市日期数据的抓取和整理。

完成情况

数据来源

  • 从上海证券交易所官网抓取了 2013-2026 年的休市通知
  • 共 80 条 休市通知,涵盖 233 个 休市日期

生成的文件

CSV 文件 (14 个) - 每年一个,包含 3 个字段:
  • date: 日期 (格式: YYYY-MM-DD)
  • is_trading_date: 是否为交易日 (0=非交易日)
  • reason: 休市原因 (如: "周二,春节放假")
Markdown 文件 (14 个) - 每年一个,包含:
  • 通知标题
  • 通知 URL
  • 通知完整内容

文件路径

所有文件保存在 /mnt/okcomputer/output/ 目录下:
  • a_stock_closed_dates_2013.csv ~ a_stock_closed_dates_2026.csv
  • a_stock_closed_notices_2013.md ~ a_stock_closed_notices_2026.md

数据示例 (2025年)

plain
Copy
date,is_trading_date,reason
2025-01-01,0,周三,元旦放假
2025-01-28,0,周二,春节放假
2025-01-29,0,周三,春节放假
...
2025-10-08,0,周三,中秋节放假
需要批量修改一下文件的命名: - `a_stock_closed_notices_{year}.md` 改为 `休市通知_{year}.md` - `a_stock_closed_dates_{year}.csv` 改为 {year}.md`
批量重命名股票休市文件
用户想要批量修改文件名:
  1. a_stock_closed_notices_{year}.md 改为 休市通知_{year}.md
  2. a_stock_closed_dates_{year}.csv 改为 {year}.csv(用户写的是 {year}.md 但应该是笔误,应该是 csv)
让我执行重命名操作。
Execute Terminal
Rename md files to Chinese names
Think
中文文件名在shell中可能有问题,让我用Python来重命名。
Execute Python code
检查文件系统中文字符支持问题
看起来文件系统对中文字符支持有问题。让我尝试用英文替代方案,或者检查当前文件状态。
Execute Terminal
Check current files
文件名中文字符处理拼音英文shutil
看起来文件系统不支持中文字符作为文件名。让我尝试用拼音或者英文替代方案,或者使用不同的方法。让我试试用 shutil.move 或者先复制再删除的方式。
Execute Python code
md文件中文名转拼音编码
CSV 文件重命名成功了。现在来处理 md 文件的中文名称问题。让我尝试用拼音或者编码方式。
Execute Python code
检查文件系统支持UTF-8中文命名
拼音方式成功了。但是用户要求的是中文文件名 "休市通知_{year}.md"。让我再尝试用中文命名,或者检查文件系统是否支持UTF-8。
Execute Python code
Think
中文文件名重命名成功了!让我验证一下最终文件列表。
Execute Terminal
List renamed files
Think
文件重命名完成了:
  • CSV 文件:{year}.csv (如 2013.csv, 2014.csv 等)
  • Markdown 文件:休市通知_{year}.md (如 休市通知_2013.md 等)
让我给用户一个确认。
文件重命名完成!
新的文件名:
Table
原文件名新文件名
a_stock_closed_dates_2013.csv2013.csv
a_stock_closed_dates_2014.csv2014.csv
......
a_stock_closed_notices_2013.md休市通知_2013.md
a_stock_closed_notices_2014.md休市通知_2014.md
......
当前文件列表:
  • CSV 文件 (14 个): 2013.csv ~ 2026.csv
  • Markdown 文件 (14 个): 休市通知_2013.md ~ 休市通知_2026.md
接下来,需要生成「交易日历」。 处理结果放到 `trading_calendar/{year}.csv` 中,同样每年一个 csv 文件。 示例 csv 数据: ```csv date,is_trading_date,reason 2026-01-01,0,"周四,元旦放假" 2026-01-02,1,周五 2026-01-03,0,周六 ``` csv 包含 3 个字段, `date`, `is_trading_date`, `reason`。一年内每天一条记录。 如果这一天为交易日,即为周一到周五且不在前面整理的休市数据里面,则 `is_trading_date` 为 1。此时,`reason` 只记录周几即可,比如(周一、周二)。 如果这一天为非交易日,比如周六周日,或者在前面整理的休市数据里面,则 `is_trading_date` 为 0。此时 `reason` 内容为 `{weekday},{休市原因}`。
生成每年交易日历CSV文件
用户需要生成交易日历。要求:
  1. 每年一个CSV文件,放在 trading_calendar/{year}.csv
  2. 包含全年每一天的记录
  3. 字段:date, is_trading_date, reason
  4. 交易日:周一到周五且不在休市数据中,is_trading_date=1,reason只记录周几
  5. 非交易日:周六周日或休市数据中的日期,is_trading_date=0,reason格式为 "{weekday},{休市原因}"
我需要:
  1. 读取之前生成的休市数据
  2. 为每一年生成全年日期
  3. 判断每一天是否为交易日
  4. 生成CSV文件
Execute Python code
Think
现在读取了休市数据,接下来需要为每一年生成交易日历。
Execute Python code
Think
交易日历已生成。让我验证一下生成的文件内容。
Execute Python code
Think
数据看起来正确。让我再验证一下2026年的数据。
Execute Python code
Think
数据看起来正确。让我列出所有生成的文件。
Execute Terminal
List trading calendar files
Think
交易日历生成完成。让我输出最终统计。
Execute Python code
Think
交易日历生成完成。让我再检查一下输出目录的完整结构。
Execute Terminal
Show output directory structure
Think
交易日历生成完成。现在输出最终结果给用户。
交易日历生成完成!

完成情况

生成的文件结构

plain
Copy
/mnt/okcomputer/output/
├── 2013.csv ~ 2026.csv          # 休市日期数据 (14个文件)
├── 休市通知_2013.md ~ 休市通知_2026.md  # 休市通知原文 (14个文件)
└── trading_calendar/            # 交易日历
    ├── 2013.csv ~ 2026.csv      # 每年完整日历 (14个文件)

交易日历统计

Table
年份总天数交易日非交易日
2013365254111
2014365245120
2015365244121
2016366244122
2017365244121
2018365244121
2019365245120
2020366244122
2021365243122
2022365242123
2023365243122
2024366243123
2025365243122
2026365242123
总计511334201693

CSV 格式示例

csv
Copy
date,is_trading_date,reason
2025-01-01,0,"周三,元旦放假"
2025-01-02,1,"周四"
2025-01-03,1,"周五"
2025-01-04,0,"周六"
2025-01-28,0,"周二,春节放假"