李晓彤 4201474
import re
import pandas as pd
import openpyxl
xlsx = '水电及其他电.xlsx'
df = pd.read_excel(xlsx)
exf = openpyxl.load_workbook(xlsx)
sheet = exf.active
C2 = sheet['C2']
C = sheet['C']
links = [c.value for c in C]
links_1=links[1:-1]
links_2=''.join(links_1)
p=re.compile('"(.*?)","(.*?)"')
list_of_tuple=p.findall(links_2)
df2=pd.DataFrame({'Link':[t[0]for t in list_of_tuple],
'f_name':[t[1]for t in list_of_tuple]})
df2.to_csv('水电及其他电.csv')
import re
import requests
import time
import pandas as pd
df=pd.read_csv('水电及其他电.csv')
p=re.compile('(?<=\d{4})(年报)|(年年报)')
f_names=[p.sub('年年度报告',f)for f in df.f_name]
df['f_name']=f_names; del p,f_names
print(df)
Unnamed: 0 Link \ 0 0 http://news.windin.com/ns/bulletin.php?code=5F... 1 1 http://news.windin.com/ns/bulletin.php?code=CD... 2 2 http://news.windin.com/ns/bulletin.php?code=C6... 3 3 http://news.windin.com/ns/bulletin.php?code=69... 4 4 http://news.windin.com/ns/bulletin.php?code=52... .. ... ... 295 295 http://news.windin.com/ns/bulletin.php?code=85... 296 296 http://news.windin.com/ns/bulletin.php?code=83... 297 297 http://news.windin.com/ns/bulletin.php?code=cd... 298 298 http://news.windin.com/ns/bulletin.php?code=43... 299 299 http://news.windin.com/ns/bulletin.php?code=93... f_name 0 协鑫能科:2020年年度报告(更新后) 1 长江电力:2020年年度报告 2 长江电力:2020年年度报告摘要 3 韶能股份:2020年年度报告摘要 4 韶能股份:2020年年度报告 .. ... 295 ST梅雁:2009年年度报告(修订版) 296 长江电力:年报 297 长江电力:年报摘要 298 *ST金果:2009年年度报告 299 *ST金果:2009年年度报告摘要 [300 rows x 3 columns]
def filter_links(words,df,include=True):
ls=[]
for word in words:
if include:
ls.append([word in f for f in df.f_name])
else:
ls.append([word not in f for f in df.f_name])
index=[]
for r in range(len(df)):
flag=not include
for c in range(len(words)):
if include:
flag=flag or ls[c][r]
else:
flag=flag and ls[c][r]
index.append(flag)
df2=df[index]
return(df2)
df_all=filter_links(['摘要','审计报告','财务','英文版'],df,include=False)
df_original=filter_links(['(','('],df_all,include=False)
df_db=filter_links(['长江电力', '韶能股份', '桂冠电力', '晶科科技', '江苏新能', '华能水电', '梅雁吉祥', '协鑫能科', '闽东电力', '甘肃电投'],df_original,include=True)
links=df_db['Link'];f_names=df_db['f_name']
def get_PDF_url(url):
r=requests.get(url);r.encoding='utf-8';html=r.text
r.close()
p=re.compile('<a href=(.*?)\s.*?>(.*?)</a>',re.DOTALL)
a=p.search(html)
if a is None:
Warning('没有找到下载链接,请手动检查链接:%s' % url)
return()
else:
href=a.group(1);fname=a.group(2).strip()
href=r.url[:26]+href
return((href,fname))
for link in links:
href,fname=get_PDF_url(link)
r=requests.get(href,allow_redirects=True)
open('%s'%fname,'wb').write(r.content)
time.sleep(10)
r.close()
import pdfplumber
import os
filenames = os.listdir()
print(filenames)
['.ipynb_checkpoints', '10companies', '600030 ', '600109 ', '600236 ', '600837 ', '600868 ', '600900 ', '600999 ', '601601 ', '601628 ', '601788 ', 'Untitled-checkpoint.ipynb', 'Untitled.ipynb', '华能水电2019年年度报告.pdf', '华能水电2020年年度报告.pdf', '协鑫能科:2020年年度报告.pdf', '晶科电力2020年年度报告.pdf', '桂冠电力2010年年度报告.pdf', '桂冠电力2013年年度报告.pdf', '桂冠电力2014年年度报告.pdf', '桂冠电力2015年年度报告.pdf', '桂冠电力2016年年度报告.pdf', '桂冠电力2017年年度报告.pdf', '桂冠电力2019年年度报告.pdf', '桂冠电力2020年度报告.pdf', '梅雁吉祥2013年年度报告.pdf', '梅雁吉祥2014年年报.pdf', '梅雁吉祥2015年年度报告.pdf', '梅雁吉祥2016年年度报告.pdf', '梅雁吉祥2017年年度报告.pdf', '梅雁吉祥2018年年度报告.pdf', '梅雁吉祥2020年年度报告.pdf', '水电及其他电.csv', '水电及其他电.xlsx', '江苏新能2018年年度报告.pdf', '江苏新能2019年年度报告.pdf', '江苏新能2020年年度报告.pdf', '甘肃电投:2012年年度报告.pdf', '甘肃电投:2013年年度报告.pdf', '甘肃电投:2014年年度报告.pdf', '甘肃电投:2015年年度报告.pdf', '甘肃电投:2016年年度报告.pdf', '甘肃电投:2017年年度报告.pdf', '甘肃电投:2018年年度报告.pdf', '甘肃电投:2019年年度报告.pdf', '甘肃电投:2020年年度报告.pdf', '长江电力2013年年度报告.pdf', '长江电力2014年年度报告.pdf', '长江电力2015年年度报告.pdf', '长江电力2016年年度报告.pdf', '长江电力2017年年度报告.pdf', '长江电力2019年年度报告.pdf', '长江电力2020年年度报告.pdf', '闽东电力:2010年年度报告.pdf', '闽东电力:2011年年度报告.pdf', '闽东电力:2012年年度报告.pdf', '闽东电力:2013年年度报告.pdf', '闽东电力:2014年年度报告.pdf', '闽东电力:2015年年度报告.pdf', '闽东电力:2016年年度报告.pdf', '闽东电力:2017年年度报告.pdf', '闽东电力:2018年年度报告.pdf', '闽东电力:2019年年度报告.pdf', '闽东电力:2020年年度报告.pdf', '韶能股份:2010年年度报告.pdf', '韶能股份:2011年年度报告.pdf', '韶能股份:2012年年度报告.pdf', '韶能股份:2013年年度报告.pdf', '韶能股份:2014年年度报告.pdf', '韶能股份:2015年年度报告.pdf', '韶能股份:2016年年度报告.pdf', '韶能股份:2017年年度报告.pdf', '韶能股份:2019年年度报告.pdf', '韶能股份:2020年年度报告.pdf']
def getText(pdf):
text = ''
doc = fitz.open(pdf)
for page in doc:
text += page.getText()
doc.close()
return(text)
def parse_data_line(pdf):
text = getText(pdf)
p1 = re.compile('\w{1,2}、主要会计数据和财务指标(.*?)(?=\w{1,2}、)',re.DOTALL)
subtext = p1.search(text)
if subtext is None:
p1 = re.compile('(\w{1,2})\s*主要会计数据(.*?)(?=(\w{1,2})\s*主要财务指标)',re.DOTALL)
subtext = p1.search(text).group(0)
else:
subtext = p1.search(text).group(0)
subp='([0-9,.%\- ]*?)\n' and '([0-9,.%\- ]*?)\s'
psub='%s%s%s%s'%(subp,subp,subp,subp)
p=re.compile('(\D+\n)+%s'%psub)
lines=p.findall(subtext)
return(lines)
filenames = os.listdir()
list=['长江电力', '韶能股份', '桂冠电力', '晶科科技', '江苏新能', '华能水电', '梅雁吉祥', '协鑫能科', '闽东电力', '甘肃电投']
import fitz
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
for i in range(10):
prefix= list[i]
pdf = [f for f in filenames if prefix[:3] in f and f.endswith('.pdf')]
year = [p[-13:-9] for p in pdf]
df_data=pd.DataFrame({'年份':year,
'营业收入':''})
for y in range(len(pdf)):
lines=parse_data_line(pdf[y])
df_fnc=pd.DataFrame([l for l in lines],columns=['',year[y]+'年',str(eval(year[y])-1)+'年','本年比上年增减',str(eval(year[y])-2)+'年'])
s=df_fnc.iloc[0,1]
s=s.replace(',','')
df_data['营业收入'][[y]]=eval(s)
plt.figure()
plt.plot(df_data['年份'],df_data['营业收入'],label=u'营业收入',color='g')
plt.xlabel(u'(年)',fontsize=13)
plt.ylabel(u'营业收入(元)',fontsize=13,rotation=90)
plt.legend(loc='best')
plt.title(u'%s%s-%s营业收入的可视化'%(prefix,str(year[0]),str(year[-1])),fontsize=13)
plt.yticks(range(0,10**10,10**9))
plt.grid(True)
plt.show()
Traceback (most recent call last): File "C:\Users\daisy\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3418, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-46-f7c95d1d1a49>", line 20, in <module> df_data['营业收入'][[y]]=eval(s) File "<string>", line unknown ^ SyntaxError: unexpected EOF while parsing
year1=['2014','2015','2016','2017','2018','2019','2020']
for i in range(7):
year2= year1[i]
pdf = [f for f in filenames if year2 in f and f.endswith('.pdf')]
fname = [p[:4] for p in pdf]
df_data=pd.DataFrame(columns=['营收'],index= fname)
df_data=df_data.fillna('')
for y in range(len(fname)):
lines=parse_data_line(pdf[y])
df_fnc1=pd.DataFrame([l for l in lines],columns=['0','1','1','2','3'])
s=df_fnc1.iloc[0,1]
s=s.replace(',','')
df_data['营收'][[y]]=eval(s)
plt.figure()
plt.bar(x=df_data.index,height=df_data['营收'],label=u'营业收入',color='c')
plt.xlabel(u'(公司)',fontsize=13)
plt.ylabel(u'营业收入(元)',fontsize=13,rotation=90)
plt.legend(loc='best')
plt.title(u'十家电力行业公司%s年营业收入'%year2,fontsize=13)
plt.yticks(range(0,10**10,10**9))
plt.xticks(rotation=45)
plt.grid(True)
plt.show()
Traceback (most recent call last): File "C:\Users\daisy\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3418, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-47-bc1ac40d2d01>", line 13, in <module> df_data['营收'][[y]]=eval(s) File "<string>", line unknown ^ SyntaxError: unexpected EOF while parsing