查看原文
其他

17G资源 | 深交所企业社会责任报告

张延丰 大邓和他的Python
2024-09-09

近4000作者: 张延丰 哈工程在读博士

近年来,企业社会责任(CSR)已成为全球学术界研究的热点。国内外各大顶刊都先后刊登了多篇关于CSR的文章,比如《企业绿色创新实践如何破解“和谐共生”难题?》(发表于管理世界)、《负责任的国际投资:ESG与中国OFDI》(发表于经济研究)、《Is my company really doing good? Factors influencing employees' evaluation of the authenticity of their company's corporate social responsibility engagement》(发表于JBR)等。这些文章核心变量的构建大都基于对企业社会责任报告的内容分析和挖掘。比如《企业绿色创新实践如何破解“和谐共生”难题?》的被解释变量(绿色创新)以及部分解释变量(二元合法性和伦理型领导)。可见,社会责任报告对于我们研究CSR至关重要。因此,接下来小编就带大家爬取深交所上市公司历年的社会责任报告,希望能够给大家带来一些帮助。



ESG数据集获取

采集4000多个pdf文件。经过数据清洗,将20G的pdf数据,汇总整理到170M的csv文件内。

数据整理不易,如需获取本数据集,请转发本文至朋友圈集赞满30, 加微信【372335839】,备注【深圳ESG数据集】



定位数据储存位置

首先,我们先导入到 http://www.szse.cn/disclosure/listed/notice/ 这个url,也即深交所发布上市公司公告的网址,打开F12(也就是开发者工具栏),并向『代码/简称/拼音/标题关键字』(即 位置1)输入关键字 『社会责任报告』,并按下查询或回车键。

需要说明的是,我们先打开F12在执行后续操作的原因是,这样可以捕捉到数据加载的全部过程。如果我们先执行操作,再打开F12的话可能会损失很多关键数据的加载过程,进而导致我们难以追溯数据的储存位置。

我们点击网页中社会责任报告的下载按钮(即 位置2 ),发现缓存文件栏当中新增了一个文件(即 位置3),因此我们猜测该文件就是储存社会责任报告的位置。

进一步地,我们将该网址复制下来并粘贴到浏览器的一个新的页面里来印证我们的猜测,发现该网址的确就是储存社会责任报告的位置。

再次,我们又继续点击了其它几个公司社会责任报告的下载键,试图通过对比它们url,来发现其构成的规律。最后,我们发现储存社会责任报告的url(以山河药辅为例)可以分为以下两个部分。

其中,一个部分是固定不变的,即 http://disc.static.szse.cn/download ;另一个部分是变化的,即 disc/disk03/finalpage/2022-08-02/de6aba8b-772f-4221-820d-92163b6584bf.PDF

因此,我们接下来要做的就是寻找变化部分的来源。

我们通过将变化的部分(即“disc/disk03 /finalpage/2022-08-02/de6aba8b-772f-4221-820d-92163b6584bf.PDF”)代入全局搜索中查询,定位到一个新的url(即位置1),而这个url就包含着储存社会责任报告的url中变化的部分(见 位置2)。那么,问题就变得简单了。我们要做的就是,通过两次请求来获取我们需要的企业社会责任报告。



爬取数据并储存

首先,我们要做的是获取储存社会责任报告url的变化的部分。需要说明的是,为了便于储存,我们还额外获取了企业名称和社会责任报告的发布时间。具体代码如下:

# @Author  : Jacob-ZHANG
# -- coding: UTF-8 --
import requests,random,json,re,time

# 首先,我们要做的是获取储存社会责任报告url的变化的部分。
# 需要说明的是,为了便于储存,我们还额外获取了企业名称和社会责任报告的发布时间。具体代码如下:
#因为有88页
for i in range(1,89):
#
    headers = {'Accept''application/json, text/javascript, */*; q=0.01'
        ,'Accept-Encoding''gzip, deflate'
        ,'Accept-Language''zh-CN,zh;q=0.9,en;q=0.8'
        ,'Content-Type''application/json'
        ,'Host''www.szse.cn'
        ,'Origin''http://www.szse.cn'
        ,'Proxy-Connection''close'
        ,'Referer''http://www.szse.cn/disclosure/listed/fixed/index.html'
        ,'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
        ,'X-Request-Type''ajax'
        ,'X-Requested-With''XMLHttpRequest'}

    playload ={
      "seDate": ["",""],
      "searchKey": ["社会责任报告"],
      "channelCode": ["listedNotice_disc"],
      "pageSize"50,
      "pageNum": i}

    response=requests.post('http://www.szse.cn/api/disc/announcement/annList?random=%s'%random.random(),
        headers=headers,
        data=json.dumps(playload))

    #1社会责任报告名称,如山河药辅2021年度社会责任报告,用于我们后面提取企业名称
    pattern2 = re.compile('title":"(.*?)","content',re.S)
    title=re.findall(pattern2,response.text)

    #2url中变化的部分
    pattern3 = re.compile('attachPath":"(.*?)"', re.S)
    searchurl = re.findall(pattern3, response.text)

    #3社会责任报告发布时间
    pattern4 = re.compile('publishTime":"(.*?)"', re.S)
    yearlist = re.findall(pattern4, response.text)
    #接下来,要做的就是在上面内容的基础上进一步获取企业社会责任报告文本了。具体代码如下
    #我们通过遍历每一个变化的部分,并结合不变的部分来构建企业是责任报告的url,从而发起请求。
    for im in range(len(title)):
        print(i,im)
        # url中变化的部分
        searchurl_id=searchurl[im]
        # 社会责任报告名称
        content=title[im]
        # 社会责任报告发布时间(单位:年),比如2022年
        year1=re.search(r'(\d{4})',yearlist[im]).group(1)
        # 我们将发布时间减1,得到它的统计时间
        year=int(year1)-1
        # 企业名称
        name0=content.split(':')[0]
        # 文件名称,形如20xx年xxxx
        name = str(year) + name0
        #将不变与变化的部分结合,得到储存社会责任报告的url并发起请求
        url1 = 'http://disc.static.szse.cn/download' + searchurl_id

        headers1={
        'Accept''text / html, application / xhtml + xml, application / xml;q = 0.9, image / avif, image / webp, image / apng, * / *;q = 0.8, application / signed - exchange;v = b3;q = 0.9',
        'Accept - Encoding''gzip, deflate',
        'Accept - Language''zh - CN, zh;q = 0.9',
        'Connection''keep - alive',
        'Host''disc.static.szse.cn',
        'Referer''http: // www.szse.cn /',
        'Upgrade - Insecure - Requests''1',
        'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
        }
        response=requests.get(url1, headers=headers1)
        # 部分文件在保存时存在未知错误,因此我们将未能保存的文件名打印出来,便于我们以后手动获取。需要说明的是,通过观察不能保存的文件大多为st或st*开头的文件
        try:
            with open("社会责任报告\%s.pdf"%name, "wb"as code:
                code.write(response.content)
            time.sleep(5)
        except:
            print(name)



文献

[1]解学梅, & 朱琪玮. (2021). 企业绿色创新实践如何破解 “和谐共生” 难题?. 管理世界37(1), 128-149.

[2]谢红军 & 吕雪.(2022).负责任的国际投资:ESG与中国OFDI. 经济研究(03),83-99.

[3]Schaefer, S. D., Terlutter, R., & Diehl, S. (2019). Is my company really doing good? Factors influencing employees' evaluation of the authenticity of their company's corporate social responsibility engagement. Journal of business research101, 128-143.



ESG数据集获取

采集4000多个pdf文件。经过数据清洗,将20G的pdf数据,汇总整理到170M的csv文件内。

数据整理不易,如需获取本数据集,请转发本文至朋友圈集赞满30, 加微信【372335839】,备注【深圳ESG数据集】




精选文章

从符号到嵌入:计算社会科学的两种文本表示

推荐 | 社科(经管)文本分析快速指南

使用cntext训练Glove词嵌入模型

认知的测量 | 向量距离vs语义投影

Wordify | 发现和区分消费者词汇的工具

在jupyter中显示pdf内容

改善matplotlib在jupyter内的渲染效果

EmoBank | 中文维度情感词典

Asent库 | 英文文本数据情感分析

karateclub库 | 计算社交网络中节点的向量

视频专栏课 | Python网络爬虫与文本分析

PNAS | 文本网络分析&文化桥梁Python代码实现

Wordify | 发现和区分消费者词汇的工具

BERTopic库 | 使用预训练模型做话题建模

tomotopy | 速度最快的LDA主题模型

文本分析方法在《管理世界》(2021.5)中的应用

Wow~70G上市公司定期报告数据集

100min视频 | Python文本分析与会计

在jupyter内运行R代码

blogdown包 | 使用R语言维护Hugo静态网站

使用R语言将多个txt汇总到一个csv文件中


继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存