zz443470785 发表于 2022-10-14 22:36

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

本帖最后由 zz443470785 于 2022-10-14 22:52 编辑

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





源代码如下:
```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')# 去掉正文前的标题
            body = remove_tags(str(articles_results))# 获取正文
            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} 秒。')

```

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

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 库

夕尘幽兰 发表于 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

实践一波
页: [1] 2 3 4 5 6 7
查看完整版本: 利用Python爬取年终总结等公文,并保存为公文格式的word文档