赞
踩
##并购重组数据爬取案例
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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。