Github项目源码注释-docx文档下载

这段代码是一个Python脚本,用于从指定的URL下载并解析JSON数据,然后使用这些数据生成一个Word文档(.docx)。下面是逐行代码的注释说明:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 指定脚本执行环境和文件编码方式

import os          # 导入os模块,用于文件系统操作
import urllib2     # 导入urllib2模块,用于发送HTTP请求(注:在Python 3中已被requests替代)
import json        # 导入json模块,用于处理JSON数据
import sys         # 导入sys模块,用于访问与Python解释器相关的变量和函数
reload(sys)         # 在Python 2中用于重新加载sys模块,Python 3已移除此用法
sys.setdefaultencoding('utf-8')   # 设置默认字符串编码为UTF-8(Python 3中不需要此操作)

# 引入python-docx库相关部分,用于Word文档操作
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt

import config      # 导入配置文件config中的设置
import log         # 导入日志处理模块log
logger = log.Log(config.log_dir, config.log_name)   # 初始化日志记录器

# 定义下载并处理Word文档的类
class DownDocx(object):
    def __init__(self, fileDir, url, info):   # 初始化方法,接收文件目录、URL和文档信息
        self.fileDir = './' + fileDir + '/'    # 构建文件保存的目录路径
        self.URL = url                         # 保存下载链接
        self.WkInfo = info                     # 保存文档信息
        if not os.path.exists(self.fileDir):    # 如果目录不存在则创建
            os.mkdir(self.fileDir)

    @staticmethod   # 静态方法,不依赖实例变量
    def geturl(urls, index):   # 根据索引获取特定页面的URL
        for url in urls:
            if url['pageIndex'] == index:
                return url['pageLoadUrl']
        return ''           # 如果找不到对应索引的URL,返回空字符串

    def down(self):         # 下载文档的方法
        reqHeader = config.reqHeaderBDWK  # 获取请求头配置
        reqHeader['Referer'] = self.URL    # 设置Referer头
        i = 1                            # 初始化页码计数器
        docFileName = self.fileDir + self.WkInfo['title'] + '.' + self.WkInfo['docType']  # 构建保存的文件名
        document = Document()             # 创建一个新的Word文档对象
        while i <= self.WkInfo['totalPageNum']:  # 遍历所有页面
            jsonUrl = self.geturl(self.WkInfo['htmlUrls']['json'], i)  # 获取当前页的JSON URL
            if not jsonUrl:  # 如果未找到URL,则报错并返回
                logger.error('下载文档失败,查找URL失败!')
                return False
            jsonUrl = jsonUrl.replace('\\', '').replace(' ', '%20')  # 清理URL
            req = urllib2.Request(jsonUrl, headers=reqHeader)  # 构建请求
            res = urllib2.urlopen(req).read()  # 发送请求并读取响应
            jsonRet = res[res.find('(')+1 : res.rfind(')')]  # 提取有效JSON数据
            logger.info('打印一下,获取json数据内容为 ' + jsonRet)
            jsonRet = json.loads(jsonRet)  # 解析JSON数据
            first = 0  # 初始化段落标记
            for item in jsonRet['body']:  # 遍历页面内容
                if item['t'] != 'word':  # 跳过非文本类型的数据
                    continue
                if first == 0 or (item['ps'] and item['ps']['_enter'] == 1):
                    first = 1
                    pg = document.add_paragraph()  # 新增段落
                if item['ps'] and item['ps']['_enter'] == 1:
                    continue  # 跳过换行标记
                run = pg.add_run(item['c'])  # 添加文本到段落
                run.font.name = u'宋体'  # 设置字体为宋体
                run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')  # 设置东亚区域字体为宋体
                run.font.size = Pt(10.5)  # 设置字体大小为10.5磅
            if i < self.WkInfo['totalPageNum']:  # 如果不是最后一页,添加分页符
                document.add_page_break()
            i += 1  # 增加页码计数
        document.save(docFileName)  # 保存文档
        return True  # 成功完成下载和转换

请注意,代码中使用了urllib2库,这是Python 2中的标准库。在Python 3中,应使用urllib.requesturllib.error替代。此外,脚本开头的setdefaultencoding在Python 3中不再需要,因为Python 3默认使用UTF-8编码。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值