吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6707|回复: 68
收起左侧

[Python 原创] 利用Python爬取年终总结等公文,并保存为公文格式的word文档

  [复制链接]
zz443470785 发表于 2022-10-14 22:36
本帖最后由 zz443470785 于 2022-10-14 22:52 编辑

马上年底了,又到了开始各种总结、述职的时候,虽然每年总结都差不多,但对于我这种文字功底差的人来说写东西无从下手,正好利用最近学的python爬虫知识,从网上爬取一些总结模板参考参考。
代码写的很一般,仅供各位朋友学习交流使用,严禁用作商业用途,如有侵权,请联系我删除!
效果如下:

运行效果

运行效果

格式化保存

格式化保存

自动下载

自动下载

源代码如下:

"""
-*- coding: utf-8 -*-
文件名:爬取好范文网文章.py
作者:nobody
环境: PyCharm,Python 3.9
日期:2022/8/8 21:42
功能:爬取 好范文网 文章,并下载到本地保存为word公文格式
"""
import time
import random
import requests
import re
from bs4 import BeautifulSoup
from w3lib.html import remove_tags
from docx.oxml.ns import qn
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT  # 设置对象居中、对齐等。
from docx.shared import Inches  # 设置图像大小
from docx.shared import Pt  # 设置像素、缩进等
from docx.shared import RGBColor  # 设置字体颜色

# 爬取网页
def get_url(URL, SIGN):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
    html = requests.get(URL, headers=headers)
    html.encoding = 'utf-8'
    soup = BeautifulSoup(html.text, 'lxml')
    # 根据标签定位
    text = soup.select(SIGN)
    return text

# 创建doc
def get_docx(TITLE, BODY):
    document = Document()  # 创建一个空白文档
    head0 = document.add_heading(level=1)  # 创建一级标题
    head0.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 标题居中
    title_run = head0.add_run(TITLE, )  # 添加标题
    title_run.font.size = Pt(24)  # 设置标题大小
    title_run.font.name = 'Times New Roman'  # 标题英文字体
    title_run.element.rPr.rFonts.set(qn('w:eastAsia'), '方正小标宋简体')  # 标题中文字体
    title_run.font.color.rgb = RGBColor(0, 0, 0)  # 字体颜色
    document.styles['Normal'].font.name = '宋体'  # 设置西文字体
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋_GB2312')  # 设置中文字体
    p = document.add_paragraph()  # 添加一个段落
    p_run = p.add_run(BODY, )
    p.paragraph_format.space_before = Pt(30)  # 段前30磅
    p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY  # 设置两端对齐方式
    p.paragraph_format.line_spacing = Pt(28.8)  # 设置行间距
    # p.paragraph_format.space_after = Pt(0)    # 设置段后间距
    p.paragraph_format.first_line_indent = Inches(0.5)  # 设置首行缩进
    p_run.font.color.rgb = RGBColor(0, 0, 0)  # 设置字体颜色
    p_run.font.size = Pt(16)  # 设置字号
    TITLE = re.sub('([^\u4e00-\u9fa5\d])', '', TITLE)  # 删除标题中的特殊字符
    name = 'D:\\IDM下载\\书\\' + TITLE + '.docx'
    document.save(name)

def main():
    n = 0
    menus = get_url('http://www.haoword.com', '.infobox .indexleft .infoco .lm .news_title h2 a')
    menus_url = []
    for menu_url in menus:
        menus_url.append(menu_url['href'])
    print(menus_url)
    for menu_url in menus_url:
        time.sleep(random.random())
        results = get_url(menu_url, '.infobox .lmleft .infoco2 .lm_addon .articles3 ul li a')
        for result in results:
            title_url = result['href']  # 文章链接
            title = result['title']  # 获取标题
            print(f'{title}:{title_url}')
            time.sleep(random.random())
            articles_results = get_url(title_url, '.infobox .detail .content p')[1:]  # 去掉正文前的标题
            body = remove_tags(str(articles_results))[1:]  # 获取正文
            get_docx(title, body)
            n += 1
    print(f'爬取完毕!共爬取 {n} 篇文章。')

if __name__ == '__main__':
    start = time.perf_counter()
    main()
    end = time.perf_counter()
    print(f'耗时 {end - start} 秒。')

相关库请自行安装,有问题欢迎评论区留言~

免费评分

参与人数 13吾爱币 +18 热心值 +10 收起 理由
sYn_ + 1 热心回复!
和马 + 1 + 1 我很赞同!
lizign30 + 1 谢谢@Thanks!
likebbs + 1 谢谢@Thanks!
katkat + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mizar + 1 + 1 谢谢@Thanks!
zhaoqingdz + 1 谢谢@Thanks!
我的睡公主 + 1 + 1 python原创必评分
看床走不动路 + 1 热心回复!
我是不会改名的 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
艾sk贝拉 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
日月与你 + 1 + 1 热心回复!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zz443470785 发表于 2024-1-1 13:25
ngxihho 发表于 2023-12-31 23:35
Traceback (most recent call last):
  File "C:%users\Administrator\Desktop\sw\312.py", line 11, in
...

没有安装 requests 库

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ngxihho + 1 + 1 热心回复!

查看全部评分

夕尘幽兰 发表于 2022-10-20 16:08
Dreamfly0319 发表于 2022-10-16 15:38
hubohang 发表于 2022-11-15 14:41
感谢分享
艾sk贝拉 发表于 2022-10-15 13:38
谢谢大佬的分享,可否给个产品呢!
icodeme 发表于 2022-10-15 14:01
感谢分享
hshcompass 发表于 2022-10-19 21:29
感谢分享,回头自己实施word 操作。
peng_jia 发表于 2022-10-20 14:03
感谢分享。
spinzhang 发表于 2022-10-20 15:35
先下下来学习,感谢大佬
 楼主| zz443470785 发表于 2022-10-21 00:35
夕尘幽兰 发表于 2022-10-20 16:08
这个实用,感谢分享

初学python,写的一般,感谢支持
ErXing 发表于 2022-10-25 09:17
实践一波
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表