python爬取2020国家科学技术奖励网站(正则表达式)调用docx转存word

Dulcea ·
更新时间:2024-11-14
· 876 次阅读

因网站部分网页源码不够规范,所以选择正则表达式代替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,代表性论文目录],主要完成人,主要完成单位)

    作者:话说一半的王



    word docx 正则 科学 正则表达式 Python

    需要 登录 后方可回复, 如果你还没有账号请 注册新账号