使用python-docx将爬取结果保存到word

如题实战内容需要满足的插件库是python-docx==0.8.10   这个在python3 里面绝对是支持的。需要注意的是如果你本地安装了docx建议先卸载docx,然后去官网下载python-docx==0.8.10 版本,本地使用python命令进入插件目录安装即可。

本期题目还是以爬虫案例为主,数据是数据库爬取好的,通过日期提取数据库中的关键内容并写入Word文档中。

关于爬虫及数据保存大家可以参考本人之前的博客,整个过程都有详细讲解。下面是本期的主要实现代码

import docx
from docx.shared import RGBColor
from docx.shared import Inches
from docx.shared import Pt
from docx.enum.text import  WD_PARAGRAPH_ALIGNMENT  #WD_ALIGN_PARAGRAPH以前的库是这个已经废弃了,如果你遇到这种案例时建议替换为新的方法库  
from docx.oxml.ns import qn
import time
import pymysql
# 创建一个空白Word对象,并设置好字体
file = docx.Document()
file.styles['Normal'].font.name = u'微软雅黑'  # 可换成word里面任意字体
file.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') 

# 创建一个封面 固定用法
p = file.add_paragraph()  # 创建一个段落
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 居中设置
p.paragraph_format.space_before = Pt(180)  # 段前距为180,调试距离  这些数值都是多次调试展示的效果根据需要自己调整数值即可
p.paragraph_format.space_after = Pt(30)  # 段后距为30
run = p.add_run('新闻速递')  # 在段落里添加内容  这个是题目大标题
font = run.font  # 设置字体
font.color.rgb = RGBColor(54, 95, 145)  # 颜色设置,RGB颜色
font.size = Pt(42)  # 字体大小设置,和word里面的字号相对应

# 在封面上添加日期
year = time.strftime("%Y")
month = time.strftime("%m")
day = time.strftime("%d")
today = year + '年' + month + '月' + day + '日'  # 构造当天日期
p = file.add_paragraph()  # 新建一个段落
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
run = p.add_run(today)  # 在段落中输入当天日期
font = run.font
font.color.rgb = RGBColor(54, 95, 145)
font.size = Pt(26)

# 添加分页符
file.add_page_break()

# 设置正文标题
p = file.add_paragraph()
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 段落文字居中设置
run = p.add_run('第一部分 阿里巴巴舆情报告')
run.font.color.rgb = RGBColor(54, 95, 145)  # 字体颜色设置
run.font.size = Pt(22)  # 字体大小设置

# 连接数据库 提取所有今天的"阿里巴巴"的新闻信息

db = pymysql.connect(host='localhost', port=3306, user='root', password='root', database='pachong', charset='utf8')
company = '阿里巴巴'
today = time.strftime("%Y-%m-%d")  # 这边采用标准格式的日期格式
cur = db.cursor()  # 创建会话调用SQL语句
sql = 'SELECT * FROM test WHERE company = %s AND date = %s'  # 编写SQL语句
cur.execute(sql, (company,today))  # 执行SQL语句
data = cur.fetchall()  # 提取所有数据,并赋值给data变量
print('爬取数据: {}\n'.format(data))
cur.close()  # 关闭会话指针
db.close()  # 关闭数据库链接

# 编写正文内容之引言
num = len(data)
p = file.add_paragraph()  # 添加新段落
p.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY  # 两端对齐
p.paragraph_format.first_line_indent = Inches(0.32)  # 这个控制首行缩进,
introduction = '本次舆情监控目标为阿里巴巴和腾讯新闻,共爬取当天新闻' + str(num) + '篇,具体新闻如下:'
p.add_run(introduction)

# 编写正文内容之具体新闻内容
for i in range(len(data)):
    p = file.add_paragraph()  # 添加新段落
    p.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY  # 设置两端对齐
    p.add_run(str(i + 1) + '. ' + data[i][1])  # 提取新闻标题

# 编写正文内容之表格添加
tb = file.add_table(rows=num + 1, cols=3, style='Light Shading Accent 1')  # 之前定义过num = len(data)
tb.cell(0, 0).text = '监控公司'
tb.cell(0, 1).text = '新闻标题'
tb.cell(0, 2).text = '新闻来源'  #对应表中的source
for i in range(num):  # 之前定义过num = len(data)
    tb.cell(i+1, 0).text = '阿里巴巴'
    tb.cell(i+1, 1).text = data[i][1]  # 提取新闻标题
    tb.cell(i+1, 2).text = data[i][3]  # 提取新闻来源

p = file.add_paragraph()
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 段落文字居中设置
run = p.add_run('第二部分 腾讯舆情报告')
run.font.color.rgb = RGBColor(54, 95, 145)  # 字体颜色设置
run.font.size = Pt(22)  # 字体大小设置
# 把Word文档保存,注意需提前创建好保存文件夹
file.save('热点新闻报告.docx')
print('报告生成完毕')

生成结果:

使用python-docx将爬取结果保存到word_第1张图片

Word文件中的内容可以根据自己项目的需要适当添加,实现过程就是这样,希望对你有帮助!

所以,有需求才有创新的动力,加油!有时候为了解决一个问题花半个晚上的时间把问题解决了,也是件非常开心的事情。

只要坚持一定会有提升,哪怕是每天只走了一步!相信自己,你也可以做到!

 

 

 

 

你可能感兴趣的:(爬虫,Python3,数据挖掘,机器学习)