因网站部分网页源码不够规范,所以选择正则表达式代替bs4,有同样需求的朋友可以看一哈~
这里放上全部代码,但注释较少,有问题可以评论交流。
# -*- coding: utf-8 -*-
import urllib.request
import re
import os
from docx import Document
from docx.shared import Inches
from docx.oxml.ns import qn
import pdb as pd
def save2word(path,r1,r2,r3,r4,r5,r6):
document = Document(path+'/'+r1+'.docx')
document.styles['Normal'].font.name = u'微软雅黑'
# 标题
run = document.add_heading('',level=1).add_run(r2)#应用场景示例标题
run.font.name=u'微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
paragraph = document.add_paragraph('学科专业评审组:'+r1)
paragraph = document.add_paragraph('项目名称:'+ r2)
keys1 = ['姓名:','工作单位:','技术职称:','学科专业:']
if type(r3) is str:
r3str = r3
paragraph = document.add_paragraph('提名单位:'+r3str)
else:
r3str = ''
for i in range(len(r3)):
r3str = r3str +'\n\t'+ str(i+1) + '.' + keys1[0]+r3[i][0]
for j in range(1,4):
r3str = r3str +'\n\t '+ keys1[j]+r3[i][j]
paragraph = document.add_paragraph('提名专家:'+r3str)
paragraph = document.add_paragraph('提名等级:'+r4)
if r5[0] == 0:
paragraph = document.add_paragraph('代表性论文(专著)目录:')
else:
paragraph = document.add_paragraph('主要知识产权证明目录(第一完成人在纸质提名书签名):')
m = len(r5[1])
for i in range(m):
urllib.request.urlretrieve('http://www.nosta.gov.cn/upload/2020slxmgb/'+r5[1][i],'./img.png')
document.add_picture(r'C:\Users\wangk\Desktop\img.png', width=Inches(6))
paragraph = document.add_paragraph('主要完成人:'+r6)
document.save(path+'/'+r1+'.docx')
def save2word2(path,r1,r2,r3,r4,r5,r6,r7):
document = Document(path+'/'+r1+'.docx')
document.styles['Normal'].font.name = u'微软雅黑'
# 标题
run = document.add_heading('',level=1).add_run(r2)#应用场景示例标题
run.font.name=u'微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
paragraph = document.add_paragraph('学科专业评审组:'+r1)
paragraph = document.add_paragraph('项目名称:'+ r2)
keys1 = ['姓名:','工作单位:','技术职称:','学科专业:']
keys2 = ['姓名:','排名:','技术职称:','工作单位:']
if type(r3) is str:
r3str = r3
paragraph = document.add_paragraph('提名单位:'+r3str)
else:
r3str = ''
for i in range(len(r3)):
r3str = r3str +'\n\t'+ str(i+1) + '.' + keys1[0]+r3[i][0]
for j in range(1,4):
r3str = r3str +'\n\t '+ keys1[j]+r3[i][j]
paragraph = document.add_paragraph('提名专家:'+r3str)
paragraph = document.add_paragraph('提名等级:'+r4)
if r5[0] == 0:
paragraph = document.add_paragraph('代表性论文(专著)目录:')
else:
paragraph = document.add_paragraph('主要知识产权证明目录(第一完成人在纸质提名书签名):')
m = len(r5[1])
for i in range(m):
urllib.request.urlretrieve('http://www.nosta.gov.cn/upload/2020slxmgb/'+r5[1][i],'./img.png')
document.add_picture(r'C:\Users\wangk\Desktop\img.png', width=Inches(6))
r6str = ''
for i in range(len(r6)):
r6str = r6str +'\n\t'+ str(i+1) + '.' + keys2[0]+r6[i][0]
for j in range(1,4):
r6str = r6str +'\n\t '+ keys2[j]+r6[i][j]
paragraph = document.add_paragraph('主要完成人:'+r6str)
r7str = ''
for i in range(len(r7)):
r7str = r7str +'\n\t'+ str(i+1) + '.' + '单位名称:' + r7[i]
paragraph = document.add_paragraph('主要完成单位:'+r7str)
document.save(path+'/'+r1+'.docx')
# table = document.add_table(rows=6, cols=2)
# table.cell(0,0).text = '学科专业评审组:'
# table.cell(0,1).text = r1
# table.cell(1,0).text = '项目名称:'
# table.cell(1,1).text = r2
# table.cell(2,0).text = '提名单位:'
# table.cell(2,1).text = r3
# table.cell(3,0).text = '提名等级:'
# table.cell(3,1).text = r4
# table.cell(4,0).text = '代表性论文(专著)目录:'
# run = table.cell(4,1).paragraphs[0].add_run()
# run.add_picture(r'C:\Users\wangk\Desktop\img1.png')
# run = table.cell(4,1).paragraphs[1].add_run()
# run.add_picture(r'C:\Users\wangk\Desktop\img2.png')
# table.cell(5,0).text = '主要完成人:'
# table.cell(5,1).text = r6
url = 'http://www.nosta.gov.cn/upload/2020slxmgb/showProject.html'
res = urllib.request.urlopen(url)
html =str(res.read(),'utf-8')
pattern1 = re.compile(r'(.*?
[\s\S]*?)',flags=re.IGNORECASE)
pattern2 = re.compile('(.*?)
',flags=re.IGNORECASE)
pattern3 = re.compile('target=_blank>(.*?)',flags=re.IGNORECASE)
pattern4 = re.compile('href=(.*?.html)',flags=re.IGNORECASE)
tablelist = re.findall(pattern1,html)
for table in tablelist:
项目组 = re.search(pattern2,table).group(1)
学科评审组 = re.findall(pattern3,table)
学科评审组href = re.findall(pattern4,table)
path = 'E://2020国家科学技术奖励//' + 项目组
if not os.path.exists(path):
os.makedirs(path)
for i in range(len(学科评审组)):
document = Document()
document.save(path+'/'+学科评审组[i]+'.docx')
url = 'http://www.nosta.gov.cn/upload/2020slxmgb/'+学科评审组href[i]
res = urllib.request.urlopen(url)
html =str(res.read(),'utf-8')
pattern5 = re.compile(r'target=_blank>(.*?).*?150px\'>(.*?)',flags=re.IGNORECASE)
pattern6 = re.compile(r'href=\'(.*?.html)',flags=re.IGNORECASE)
项目名称 = re.findall(pattern5,html)
项目名称href = re.findall(pattern6,html)
for j in range(len(项目名称)):
url = 'http://www.nosta.gov.cn/upload/2020slxmgb/'+ \
学科评审组href[i][0:学科评审组href[i].rfind('/', 1) + 1]+项目名称href[j]
res = urllib.request.urlopen(url)
html =str(res.read(),'utf-8')
pattern7 = re.compile('(.*?)
',flags=re.IGNORECASE)
pattern8 = re.compile('(.*?) ',flags=re.IGNORECASE)
content = re.findall(pattern7,html)
if 学科评审组[i]=='创新团队评审组':
提名单位 = re.search('提名单位.*?style.*?>(.*?)',html,re.IGNORECASE)
if 提名单位 is None:
团队名称 = re.search('团队名称.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
提名专家 = ''
experts = re.findall(pattern8,content[0])
for index,expert in enumerate(experts):
姓名 = re.search('(.*?)',expert,re.IGNORECASE).group(1)
工作单位 = re.search('工作单位:(.*?)
',expert,re.IGNORECASE).group(1)
技术职称 = re.search('技术职称:(.*?)
',expert,re.IGNORECASE).group(1)
学科专业 = re.search('学科专业:(.*?)
',expert,re.IGNORECASE).group(1)
提名专家 = 提名专家 +'\n\t'+str(index+1)+'.'+'姓名:'+姓名+ \
'\n\t '+'工作单位:'+工作单位+ \
'\n\t '+'技术职称:'+技术职称+ \
'\n\t '+'学科专业:'+学科专业
主要成员 = re.findall('姓名.*?(.*?)',content[1],re.IGNORECASE)
支持单位 = re.findall('单位名称.*?(.*?)',html,re.IGNORECASE)
document = Document(path+'/'+学科评审组[i]+'.docx')
document.styles['Normal'].font.name = u'微软雅黑'
# 标题
run = document.add_heading('',level=1).add_run(项目名称[j][0])#应用场景示例标题
run.font.name=u'微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
paragraph = document.add_paragraph('团队名称:'+团队名称)
paragraph = document.add_paragraph('提名专家:'+提名专家)
row21 = ''
for index,成员 in enumerate(主要成员):
row21 = row21 + '\n\t' + str(index+1) + '.' + '姓名:' + 成员
paragraph = document.add_paragraph('主要成员:'+row21)
row31 = ''
for index,单位 in enumerate(支持单位):
row31 = row31 + '\n\t' + str(index+1) + '.' + '单位名称:' + 单位
paragraph = document.add_paragraph('支持单位:'+row31)
document.save(path+'/'+学科评审组[i]+'.docx')
continue
else:
团队名称 = re.search('团队名称.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
主要成员 = re.findall('姓名.*?(.*?)',html,re.IGNORECASE)
支持单位 = re.findall('单位名称.*?(.*?)',html,re.IGNORECASE)
document = Document(path+'/'+学科评审组[i]+'.docx')
document.styles['Normal'].font.name = u'微软雅黑'
# 标题
run = document.add_heading('',level=1).add_run(项目名称[j][0])#应用场景示例标题
run.font.name=u'微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
paragraph = document.add_paragraph('团队名称:'+团队名称)
paragraph = document.add_paragraph('提名单位:'+提名单位.group(1))
row21 = ''
for index,成员 in enumerate(主要成员):
row21 = row21 + '\n\t' + str(index+1) + '.' + '姓名:' + 成员
paragraph = document.add_paragraph('主要成员:'+row21)
row31 = ''
for index,单位 in enumerate(支持单位):
row31 = row31 + '\n\t' + str(index+1) + '.' + '单位名称:' + 单位
paragraph = document.add_paragraph('支持单位:'+row31)
document.save(path+'/'+学科评审组[i]+'.docx')
continue
flag = re.search('主要完成单位',html)
if flag is None:
if len(content)==1:
# 提名单位
提名单位 = re.search('提名单位.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
提名等级 = re.search('提名等级.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
主要完成人 = ''
finishers = re.findall(pattern8,content[0])
for index,finisher in enumerate(finishers):
姓名 = re.search('(.*?)',finisher,re.IGNORECASE).group(1)
排名 = re.search('排名:(.*?)
',finisher,re.IGNORECASE).group(1)
技术职称 = re.search('技术职称:(.*?)
',finisher,re.IGNORECASE).group(1)
工作单位 = re.search('工作单位:(.*?)
',finisher,re.IGNORECASE).group(1)
完成项目时所在单位 = re.search('完成项目时所在单位:(.*?)
',finisher,re.IGNORECASE)
if 完成项目时所在单位 is None:
主要完成人 = 主要完成人+'\n\t'+str(index+1)+'.'+'姓名:'+姓名+ \
'\n\t '+'排名:'+排名+ \
'\n\t '+'技术职称:'+技术职称+ \
'\n\t '+'工作单位:'+工作单位
else:
主要完成人 = 主要完成人+'\n\t'+str(index+1)+'.'+'姓名:'+姓名+ \
'\n\t '+'排名:'+排名+ \
'\n\t '+'技术职称:'+技术职称+ \
'\n\t '+'工作单位:'+工作单位+ \
'\n\t '+'完成项目时所在单位:'+完成项目时所在单位.group(1)
papers = re.search('代表性论文.*?(.*? )',html,re.IGNORECASE)
if papers is None:
papers = re.search('主要知识产权.*?(.*? )',html,re.IGNORECASE)
主要知识产权目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word(path,学科评审组[i],项目名称[j][0],提名单位,提名等级,[1,主要知识产权目录],主要完成人)
else:
代表性论文目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word(path,学科评审组[i],项目名称[j][0],提名单位,提名等级,[0,代表性论文目录],主要完成人)
else:
提名等级 = re.search('提名等级.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
提名专家 = []
experts = re.findall(pattern8,content[0])
for expert in experts:
姓名 = re.search('(.*?)',expert,re.IGNORECASE).group(1)
工作单位 = re.search('工作单位:(.*?)
',expert,re.IGNORECASE).group(1)
技术职称 = re.search('技术职称:(.*?)
',expert,re.IGNORECASE).group(1)
学科专业 = re.search('学科专业:(.*?)
',expert,re.IGNORECASE).group(1)
提名专家.append([姓名,工作单位,技术职称,学科专业])
主要完成人 = ''
finishers = re.findall(pattern8,content[0])
for index,finisher in enumerate(finishers):
姓名 = re.search('(.*?)',finisher,re.IGNORECASE).group(1)
排名 = re.search('排名:(.*?)
',finisher,re.IGNORECASE).group(1)
技术职称 = re.search('技术职称:(.*?)
',finisher,re.IGNORECASE).group(1)
工作单位 = re.search('工作单位:(.*?)
',finisher,re.IGNORECASE).group(1)
完成项目时所在单位 = re.search('完成项目时所在单位:(.*?)
',finisher,re.IGNORECASE)
if 完成项目时所在单位 is None:
主要完成人 = 主要完成人+'\n\t'+str(index+1)+'.'+'姓名:'+姓名+ \
'\n\t '+'排名:'+排名+ \
'\n\t '+'技术职称:'+技术职称+ \
'\n\t '+'工作单位:'+工作单位
else:
主要完成人 = 主要完成人+'\n\t'+str(index+1)+'.'+'姓名:'+姓名+ \
'\n\t '+'排名:'+排名+ \
'\n\t '+'技术职称:'+技术职称+ \
'\n\t '+'工作单位:'+工作单位+ \
'\n\t '+'完成项目时所在单位:'+完成项目时所在单位.group(1)
papers = re.search('代表性论文.*?(.*? )',html,re.IGNORECASE)
if papers is None:
papers = re.search('主要知识产权.*?(.*? )',html,re.IGNORECASE)
主要知识产权目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word(path,学科评审组[i],项目名称[j][0],提名专家,提名等级,[1,主要知识产权目录],主要完成人)
else:
代表性论文目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word(path,学科评审组[i],项目名称[j][0],提名专家,提名等级,[0,代表性论文目录],主要完成人)
else:
if len(content)==2:
# 提名单位
提名单位 = re.search('提名单位.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
提名等级 = re.search('提名等级.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
主要完成人 = []
finishers = re.findall(pattern8,content[0])
for finisher in finishers:
姓名 = re.search('姓名.*?(.*?)',finisher,re.IGNORECASE).group(1)
排名 = re.search('排名:(.*?)
',finisher,re.IGNORECASE).group(1)
技术职称 = re.search('技术职称:(.*?)
',finisher,re.IGNORECASE).group(1)
工作单位 = re.search('工作单位:(.*?)
',finisher,re.IGNORECASE).group(1)
主要完成人.append([姓名,排名,技术职称,工作单位])
主要完成单位 = []
finishers = re.findall(pattern8,content[1])
for finisher in finishers:
单位名称 = re.search('单位名称.*?(.*?)',finisher,re.IGNORECASE).group(1)
主要完成单位.append(单位名称)
papers = re.search('代表性论文.*?(.*? )',html,re.IGNORECASE)
if papers is None:
papers = re.search('主要知识产权.*?(.*? )',html,re.IGNORECASE)
主要知识产权目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word2(path,学科评审组[i],项目名称[j][0],提名单位,提名等级,[1,主要知识产权目录],主要完成人,主要完成单位)
else:
代表性论文目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word2(path,学科评审组[i],项目名称[j][0],提名单位,提名等级,[0,代表性论文目录],主要完成人,主要完成单位)
else:
提名等级 = re.search('提名等级.*?style.*?>(.*?)',html,re.IGNORECASE).group(1)
提名专家 = []
experts = re.findall(pattern8,content[0])
for expert in experts:
姓名 = re.search('(.*?)',expert,re.IGNORECASE).group(1)
工作单位 = re.search('工作单位:(.*?)
',expert,re.IGNORECASE).group(1)
技术职称 = re.search('技术职称:(.*?)
',expert,re.IGNORECASE).group(1)
学科专业 = re.search('学科专业:(.*?)
',expert,re.IGNORECASE).group(1)
提名专家.append([姓名,工作单位,技术职称,学科专业])
主要完成人 = []
finishers = re.findall(pattern8,content[1])
for finisher in finishers:
姓名 = re.search('姓名.*?(.*?)',finisher,re.IGNORECASE).group(1)
排名 = re.search('排名:(.*?)
',finisher,re.IGNORECASE).group(1)
技术职称 = re.search('技术职称:(.*?)
',finisher,re.IGNORECASE).group(1)
工作单位 = re.search('工作单位:(.*?)
',finisher,re.IGNORECASE).group(1)
主要完成人.append([姓名,排名,技术职称,工作单位])
主要完成单位 = []
finishers = re.findall(pattern8,content[2])
for finisher in finishers:
单位名称 = re.search('单位名称.*?(.*?)',finisher,re.IGNORECASE).group(1)
主要完成单位.append(单位名称)
papers = re.search('代表性论文.*?(.*? )',html,re.IGNORECASE)
if papers is None:
papers = re.search('主要知识产权.*?(.*? )',html,re.IGNORECASE)
主要知识产权目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word2(path,学科评审组[i],项目名称[j][0],提名专家,提名等级,[1,主要知识产权目录],主要完成人,主要完成单位)
else:
代表性论文目录 = re.findall(r'.*?src=\'../(.*?.jpg)\'',papers.group(1),re.IGNORECASE)
save2word2(path,学科评审组[i],项目名称[j][0],提名专家,提名等级,[0,代表性论文目录],主要完成人,主要完成单位)