需求:
excel文件中存放了很多html标签文本,需要把文本内容在浏览器中打开将内容截图,放入doc文档保存。
手动过程
需要逐条手动处理
1. 从excel表格中复制标签文本内容
<div>二项竞争性比选结果公示<br>南昌通信段<a>南昌通信段委外工程</a>2022-06-28 15:02发表于江西<br><p> 根据南昌通信段2022年6月27日关于 “莆田车间基站房屋漏水整治” 项目比选结果的审批意见,现将结果予以公布。具体如下:<br>中选单位:福建志海建设有限公司</p><p>中选情况:承诺在实际验收决算的基础上降造 12% 结算费用。<br> 如对本结果有异议的,可自本公示发布之日起三日内提出。<br> 梅旭宝 联系方式:0791-87025476<br> 曾国萍(纪检监察) 联系方式:0791-87027016</p><p><br></p><p> 根据南昌通信段2022年6月15日关于 “吉衡线K72迁改” 项目比选结果的审批意见,现将结果予以公布。具体如下:<br>中选单位:南昌精通实业有限公司</p><p>中选情况:承诺在实际验收决算的基础上降造 12.5% 结算费用。<br> 如对本结果有异议的,可自本公示发布之日起三日内提出。<br> 梅旭宝 联系方式:0791-87025476<br> 曾国萍(纪检监察) 联系方式:0791-87027016</p><p><br></p><p><br></p><p><br></p><p> 南昌通信段 </p><p> 2022 年 6 月 28 日</p></div>
2.将标签文本内容放入html文件在浏览器中打开:
3.截图放入word文档。
脚本实现
由于数据很多,且步骤重复,可以通过python脚本实现这一过程自动化。
本人没有系统的学习过python,对很多语法规范都不了解,写的一些脚本都是根据功能点在网上查的代码,然后组合成自己需要的功能,所以代码写得比较凌乱,见谅。
用到的三方包及工具:
selenium、xlrd、python-docx
webdriver地址:http://chromedriver.storage.googleapis.com/index.html
谷歌浏览器地址:谷歌浏览器Chrome最新版下载地址汇总 - 知乎
步骤拆分:
1.按行读取excel文件内容
2.将内容写入html文件
3.通过chrome驱动实现在浏览器打开html文件并滚动截图并将图片保存到本地
4.读入的excel内容按字段写入word文档中。
代码:
from selenium import webdriver
import time
#导出word
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT #设置对象居中、对齐等。
from docx.enum.text import WD_TAB_ALIGNMENT,WD_TAB_LEADER #设置制表符等
from docx.shared import Inches #设置图像大小
from docx.shared import Pt #设置像素、缩进等
from docx.shared import RGBColor #设置字体颜色
from docx.shared import Length #设置宽度
from docx.oxml.ns import qn
from docx import Document
import xlrd
#临时图片路径
img_path = f'C:\\Users\\Administrator\\Desktop\\jietu\\1.png'
#临时html文件路径
html_path = f'C:\\Users\\Administrator\\Desktop\\jietu\\temp.html'
document=Document()
#截图
def screencut():
options = webdriver.ChromeOptions()
options.add_argument('--disable-gpu') # 禁用gpu
options.add_argument('--ignore-certificate-errors') #忽略一些莫名的问题
options.add_experimental_option('excludeSwitches', ['enable-automation']) # 开启开发者模式
options.add_argument('--disable-blink-features=AutomationControlled') # 谷歌88版以上防止被检测
options.add_argument('--headless') # 无界面
driver = webdriver.Chrome(options=options) # 将chromedriver放到Python安装目录Scripts文件夹下
#临时html文件路径
url = f"file:///C:/Users/Administrator/Desktop/jietu/temp.html"
driver.get(url)
time.sleep(1)
js_height = "return document.body.clientHeight"
k = 1
height = driver.execute_script(js_height)
while True:
if k * 500 < height:
js_move = "window.scrollTo(0,{})".format(k * 500)
driver.execute_script(js_move)
time.sleep(0.2)
height = driver.execute_script(js_height)
k += 1
else:
break
# 注:必须开启无界面模式,即:--headless
# 接下来是全屏的关键,用js获取页面的宽高,如果有其他需要用js的部分也可以用这个方法
width = driver.execute_script("return document.body.scrollWidth")
height = driver.execute_script("return document.body.scrollHeight")
# 将浏览器的宽高设置成刚刚获取的宽高
driver.set_window_size(width, height)
time.sleep(1)
# 截图并关掉浏览器
driver.save_screenshot(img_path)
time.sleep(0.5)
driver.close()
#创建word文档
def createDoc(prjName,oriId,keywod,date,detail):
#初始化标题
run = document.add_heading("").add_run(prjName)
run.font.name = u'宋体'
# 设置中文字体
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
# 设置字体颜色
#run.font.color.rgb = RGBColor(255, 255, 255)
p2 = document.add_paragraph()
run2 = p2.add_run(oriId)
p3 = document.add_paragraph()
run3 = p3.add_run('关键字:'+keywod)
p4 = document.add_paragraph()
run4 = p4.add_run('日期:'+date)
document.add_picture(img_path,width=Pt(500))
def readExcel():
#读文件
book = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\jietu\zhaobiao.xls')
sheet = book.sheets()[0]
for rown in range(sheet.nrows):
if rown == 0:
continue
oriId = sheet.cell_value(rown,0)
prjName = sheet.cell_value(rown,2)
keywod = sheet.cell_value(rown,3)
date = sheet.cell_value(rown,5)
detail = sheet.cell_value(rown,6)
#写文件
with open(html_path,'w') as f:
f.write(detail)
f.close()
#打开并截图
screencut()
#保存到文档中
createDoc(prjName,oriId,keywod,date,detail)
#####################调用方法开始########################
#读取excel文件
readExcel()
#保存
document.save('C:\\Users\\Administrator\\Desktop\\jietu\\招标信息.docx')
效果如下:
Python实现识别html文本内容并截图放入word文档