卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章11201本站已运行3223

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

马上年底了,又到了开始各种总结、述职的时候,虽然每年总结都差不多,但对于我这种文字功底差的人来说写东西无从下手,正好利用最近学的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} 秒。')
 

 

卓越飞翔博客
上一篇: [Python]直播流录制-在线录制你喜欢的直播节目永久保存
下一篇: PHP为任意页面设访问密码,需要登陆才能访问
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏