python爬虫获取并购重组数据

python爬虫获取并购重组数据,第1张

##并购重组数据爬取案例
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)

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

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")

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()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/579420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存