当前位置:   article > 正文

python爬虫获取并购重组数据_东方财富网并购公告爬虫

东方财富网并购公告爬虫

##并购重组数据爬取案例
1、寻找并购数据网址,网址见案例代码;
2、分析数据在网页上存在的形式。例如本文:每次跳转页面,都会发送一个请求,返回一个Json格式的结果。我们可以看到json里面的数据就是我们在网页中看到的并购数据,我们可以对该json文件进行解析就可以获取到需要的并购重组数据;

3、通过目前的json获取到的数据仅仅只是一个页面的数据,我们查看请求地址发现,页面跳转,参数pageNumber跟随着页面的跳转变化。因此我们可以通过遍历pageNumber来爬取所以页码。当然由于pageSize参数的存在,实际上,给我们提供了一次性爬取的技巧,但是本文暂不是使用该参数进行偷懒,采用遍历页码的方式爬取。

https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery112304752391324797971_1649497021854&sortColumns=SCGGRQ&sortTypes=-1&pageSize=50&pageNumber=2&columns=ALL&source=WEB&token=894050c76af8597a853f5b408b759f5d&reportName=RPTA_WEB_BGCZMX

4、通过python写脚本实时获取该网页的页数

    def tablelenth(self):
        """
        :comment:获取实时爬取数据的页码的长度
        :return:脚本运行时间下的东方财富并购重组页面下数据表的页数
        """
        bingouhtml=request.urlopen(r'https://data.eastmoney.com/bgcz/').read()
        bingouhtml=str(bingouhtml)
        pattern=r'"pages":(\d{4,5})'
        lenlist=re.findall(pattern,bingouhtml)
        if len(lenlist)==1:
            return int(lenlist[0])
        else:
            print('页码长度获取异常')
            sys.exit(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

5、批量生成请求连接URL

    def geturl(self):
        """
        :comment 根据page_length,获取并购url链接,每从第1页开始到page_length页;
        :return url链接列表
        """
        page_length=self.tablelenth()
        urlList=[]
        for i in range (page_length):
            json_url='https://datacenter-web.eastmoney.com/api/data/get?callback=jQuery112304809089840055041_1640451070306&st=SCGGRQ&sr=-1&ps=50&p=' +str(i+1)+'&sty=ALL&source=WEB&token=894050c76af8597a853f5b408b759f5d&type=RPTA_WEB_BGCZMX'
            urlList.append(json_url)
        return urlList
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

6、遍历请求连接获取并购数据,将并购数据写入excel中。

    def get_data(self):
        '''
        :comment 根据url连接,获取并购数据,并将他们写入到execl中
        【⚠️该方法主要通过json.loads,将str类型转化为dict,通过对dict的解析获取数据,缺点在于没办法直接解析到json中带[]部分的内容】
        :return:
        '''
        urlList=self.geturl()
        datamatrix = []
        for i in range(len(urlList)):
            result=request.urlopen(urlList[i]).read().decode("utf-8")
            pattern=r'jQuery112304809089840055041_1640451070306\((.*)\)'
            result=re.findall(pattern,result)
            result=json.loads(result[0])
            result=result["result"]["data"]
            for data in result:
                rowlist=[]
                rowlist.append(data['MXID'])
                rowlist.append(data['H_COMNAME'])
                rowlist.append(data['G_GOMNAME'])
                rowlist.append(data['S_COMNAME'])
                rowlist.append(data['SCODE'])
                rowlist.append(data['SNAME'])
                rowlist.append(data['ZRBL'])
                rowlist.append(data['OBJTYPE'])
                rowlist.append(data['JYJE'])
                rowlist.append(data['JD'])
                rowlist.append(data['ZRFS'])
                rowlist.append(data['SCGGRQ'])
                rowlist.append(data['ANNOUNDATE'])
                rowlist.append(data['BZNAME'])
                rowlist.append(data['TJEBZH'])
                rowlist.append(data['MKT'])
                rowlist.append(data['REORGANIZECODE'])
                datamatrix.append(rowlist)
        workbook = xlwt.Workbook()
        sheet = workbook.add_sheet("并购数据")
        for i in range(len(datamatrix)):
            for j in range(len(datamatrix[i])):
                sheet.write(i, j, datamatrix[i][j])
        workbook.save(r"并购数据.xlsx")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

7、分享本案例代码【复制即可运行】

#自行导入对应第三方包,pip都能弄到。
import json
import re
import jsonpath
import xlwt
from urllib import request
import sys
class CatchBinGouData():
    def tablelenth(self):
        """
        :comment:获取实时爬取数据的页码的长度
        :return:脚本运行时间下的东方财富并购重组页面下数据表的页数
        """
        bingouhtml=request.urlopen(r'https://data.eastmoney.com/bgcz/').read()
        bingouhtml=str(bingouhtml)
        pattern=r'"pages":(\d{4,5})'
        lenlist=re.findall(pattern,bingouhtml)
        if len(lenlist)==1:
            return int(lenlist[0])
        else:
            print('页码长度获取异常')
            sys.exit(0)

    def geturl(self):
        """
        :comment 根据page_length,获取并购url链接,每从第1页开始到page_length页;
        :return url链接列表
        """
        page_length=self.tablelenth()
        urlList=[]
        for i in range (page_length):
            json_url='https://datacenter-web.eastmoney.com/api/data/get?callback=jQuery112304809089840055041_1640451070306&st=SCGGRQ&sr=-1&ps=50&p=' +str(i+1)+'&sty=ALL&source=WEB&token=894050c76af8597a853f5b408b759f5d&type=RPTA_WEB_BGCZMX'
            urlList.append(json_url)
        return urlList

    def get_data(self):
        '''
        :comment 根据url连接,获取并购数据,并将他们写入到execl中
        【⚠️该方法主要通过json.loads,将str类型转化为dict,通过对dict的解析获取数据,缺点在于没办法直接解析到json中带[]部分的内容】
        :return:
        '''
        urlList=self.geturl()
        datamatrix = []
        for i in range(len(urlList)):
            result=request.urlopen(urlList[i]).read().decode("utf-8")
            pattern=r'jQuery112304809089840055041_1640451070306\((.*)\)'
            result=re.findall(pattern,result)
            result=json.loads(result[0])
            result=result["result"]["data"]
            for data in result:
                rowlist=[]
                rowlist.append(data['MXID'])
                rowlist.append(data['H_COMNAME'])
                rowlist.append(data['G_GOMNAME'])
                rowlist.append(data['S_COMNAME'])
                rowlist.append(data['SCODE'])
                rowlist.append(data['SNAME'])
                rowlist.append(data['ZRBL'])
                rowlist.append(data['OBJTYPE'])
                rowlist.append(data['JYJE'])
                rowlist.append(data['JD'])
                rowlist.append(data['ZRFS'])
                rowlist.append(data['SCGGRQ'])
                rowlist.append(data['ANNOUNDATE'])
                rowlist.append(data['BZNAME'])
                rowlist.append(data['TJEBZH'])
                rowlist.append(data['MKT'])
                rowlist.append(data['REORGANIZECODE'])
                datamatrix.append(rowlist)
        workbook = xlwt.Workbook()
        sheet = workbook.add_sheet("并购数据")
        for i in range(len(datamatrix)):
            for j in range(len(datamatrix[i])):
                sheet.write(i, j, datamatrix[i][j])
        workbook.save(r"并购数据.xlsx")

if __name__ == '__main__':
    bgd=CatchBinGouData()
    table=bgd.get_data()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/584725
推荐阅读
相关标签
  

闽ICP备14008679号