2006~2025 年上市公司社会责任报告 PDF 及 txt 文本数据

今天给大家分享一份 2006~2025 年的上市公司社会责任报告 PDF 及 txt 文本数据,爬取自巨潮资讯网。

数据来源与处理方法

本数据从巨潮资讯网(cninfo.com.cn)的公告全文检索功能批量爬取。处理流程如下:

第一步:爬取上市公司列表与报告元信息

首先从巨潮资讯获取全部 A 股上市公司代码列表,再逐家公司检索关键词「社会责任」的历史公告,提取每份报告的证券代码、公司名称、公告标题和附件下载链接:

library(tidyverse)

# 爬取全部上市公司列表
jsonlite::fromJSON("http://www.cninfo.com.cn/new/data/szse_stock.json") %>%
.$stockList %>%
as_tibble() -> codelist

# 循环所有公司,检索社会责任报告元信息
lapply(1:nrow(codelist), function(x){
data = list(
`pageNum` = "1",
`pageSize` = "30",
`stock` = paste0(codelist$code[x], ",", codelist$orgId[x]),
`searchkey` = "社会责任",
`seDate` = "2000-01-01~2026-03-31"
)
res <- httr::POST(url = "https://www.cninfo.com.cn/new/hisAnnouncement/query",
body = data, encode = "form")
content(res)$announcements
}) -> tempres

第二步:过滤无关公告并批量下载 PDF

过滤掉摘要、英文版、制度类公告,只保留正文社会责任报告,然后批量下载 PDF 文件:

# 过滤无关公告
df2 %>%
mutate(announcementTitle = str_remove_all(announcementTitle, "</?em>")) %>%
filter(!str_detect(announcementTitle, "摘要|(英文版)|社会责任管理制度|社会责任制度")) -> df2

# 批量下载 PDF
lapply(1:nrow(df2), function(x){
download.file(df2$url[x],
destfile = paste0("esg-pdfs/", df2$secCode[x], "-",
df2$secName[x], "-",
str_remove_all(df2$announcementTitle[x], "/"), ".pdf"))
})

第三步:从 PDF 首页提取报告年份,按年份归类

利用 pdftools 包读取 PDF 全文,通过正则提取首页年份信息,将文件重命名后分别存入 pdf_by_year/ 和 txt_by_year/ 按年文件夹:

library(pdftools)
library(fs)
library(stringr)

pdf_files <- dir_ls("esg-pdfs", glob = "*.pdf")

for (pdf_path in pdf_files) {
filename <- basename(pdf_path)
# 按 - 分割取最后一段,提取4位年份
parts <- str_split(filename, "-", simplify = TRUE)
year <- str_extract(parts[length(parts)], "\\d{4}")
if (is.na(year)) next

# 复制 PDF 到年份文件夹
file_copy(pdf_path, path("pdf_by_year", year, filename), overwrite = TRUE)

# 提取文本并保存 TXT
text <- pdf_text(pdf_path)
writeLines(text, path("txt_by_year", year,
str_replace(filename, ".pdf", ".txt")))
}

最后用 writexl 统计各年份报告数量与文件夹大小,汇总为 2006~2025年上市公司社会责任报告数量.xlsx。

数据概览

本数据集共收录13,075 份上市公司社会责任报告,涵盖 2006 年至 2025 年,同步提供:

  • pdf_by_year/:原始 PDF 报告,按年份分文件夹存储,共 13,075 份
  • txt_by_year/:将 PDF 全文提取为 TXT 文本,按年份分文件夹存储,共 13,075 份
  • 2006~2025年上市公司社会责任报告数量.xlsx:各年份报告数量与文件夹大小统计表

数量分布如下图所示:

数据引用格式

由于该数据包含较多 RStata 处理的内容,在研究中使用该数据请使用清晰的方式注明数据来源于 RStata 或者 RStata 数据中心,并使用如下格式引用:

RStata 数据中心: 2006~2025年上市公司社会责任报告 PDF 及 txt 文本数据. 2026. https://tidyfriday.cn/rsdb2/

英文文献可以使用下面的格式引用:

RStata Data Center: PDF and TXT Text Data of CSR Reports from Listed Companies, 2006–2025. 2026. https://tidyfriday.cn/rsdb2/

关联课程/数据推荐

使用 R 语言爬取全部上市公司的年报数据:https://rstata.duanshu.com/#/course/6e8f8a1c6b2e4784974b1087fcbfc52c

2000~2024 年上市公司年报 PDF & TXT 文件合集:https://rstata.duanshu.com/#/course/05b850225f8344aa9d3b1a4127314f88

和讯网上市公司社会责任评分全部数据:https://rstata.duanshu.com/#/course/fd1d249448f94907a2e836ea0f180631

2018~2023 年上市公司ESG评级面板数据:https://rstata.duanshu.com/#/course/94186dd77d0f49ac8dc101ebcd5ded27

R 语言文本分析:https://rstata.duanshu.com/#/course/bf37cf50eef04d38b43541cc52114c96

使用 R 语言从 PDF 文档中提取表格:https://rstata.duanshu.com/#/course/f52eeb1f36e4400eb0b3e58d950371a5

点击这里跳转到 RStata 短书平台获取附件:2006~2025 年上市公司社会责任报告 PDF 及 txt 文本数据

评论