如何利用python下载原创力文档

devtools/2024/9/23 9:23:38/

原创力文档是一个文档资源共享平台,文档内容类型丰富,包含计算机、高等教育、金融投资、医药卫生、汽车机械、外语学习、报告分析、法律法规、研究生考试、电子工程、经济贸易、建筑施工、幼儿小学教育、中学教育、文学历史、资格认证考试、人力资源、学术论文、行业资料、办公文档、生活休闲,满足你学习、工作之需,提高解决问题效率和能力!

经常看见有人发贴求原创力文档下载,正好最近在学python,就用python写了个原创力文档下载工具,授人以鱼不如授人以渔。

源代码如下:

"""
-*- coding: utf-8 -*-
文件名:原创力文档下载.py
作者:zhaozhao
环境: PyCharm
功能:原创力文档下载(仅支持可免费预览的部分)
"""
import os
import re
import requests
import time
from PIL import Image
from tqdm import tqdmdef get_html(url):html = requests.get(url)html.encoding = 'utf-8'return html.textdef get_params(url):html = get_html(url)aid = re.findall(pattern='aid: (.*?),', string=html, flags=re.S)[1]pages = re.findall(pattern='preview_page: (.*?),', string=html, flags=re.S)[0]view_token = re.findall(pattern="view_token: '(.*?)' //预览的token", string=html, flags=re.S)[0]params = []for page in range(1, int(pages) + 1, 6):param = {'project_id': '1','aid': aid,'view_token': view_token,'page': page}params.append(param)return paramsdef img_to_pdf(folder_path, pdf_file_path):files = os.listdir(folder_path)png_files = []sources = []for file in files:if "png" in file or "jpg" in file:png_files.append(folder_path + file)try:png_files.sort(key=lambda x: int(str(re.findall("\d+", x)[0])))except IndexError:files.sort()output = Image.open(png_files[0])png_files.pop(0)for file in png_files:png_file = Image.open(file)sources.append(png_file)output.save(pdf_file_path, "pdf", save_all=True, append_images=sources)def main():url = input("请输入文档链接:")path = input("请输入保存路径:")title = re.findall(pattern="title: '(.*?)', //文档标题", string=get_html(url), flags=re.S)[0]img_path = path +'\\'+ title.split('.')[0]for param in tqdm(get_params(url), desc="下载进度", unit="epoch", colour='green', ncols=100):headers = {'Accept': '*/*','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7','Connection': 'keep-alive','DNT': '1','Host': 'openapi.book118.com','Referer': 'https://max.book118.com/','sec-ch-ua': '"Chromium";v="104", " Not A;Brand";v="99", "Microsoft Edge";v="104"','sec-ch-ua-platform': '"Windows"','Sec-Fetch-Dest': 'script','Sec-Fetch-Mode': 'no-cors','Sec-Fetch-Site': 'same-site','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.54'}html = requests.get(url='https://openapi.book118.com/getPreview.html', headers=headers, params=param)html.encoding = 'utf-8'res = re.findall(pattern=r'"data":(.*?),"pages"', string=html.text, flags=re.S)[0]res = eval(res.replace('\\', ''))  # 将字符串转换为字典for k, v in res.items():img = requests.get('https:' + v).contentif not os.path.exists(img_path):os.mkdir(img_path)with open(img_path+'\\'+k +'.png', 'wb') as f:f.write(img)# print("第 {} 页下载成功".format(k))time.sleep(3)img_to_pdf(img_path+'\\', img_path+'\\'+title.split('.')[0]+'.pdf')print("文档下载成功!")if __name__ == '__main__':main()

源代码在python环境里面运行就行,不会的可以百度学一下安装pycharm,很简单,视频网站上也有很多教学视频。


http://www.ppmy.cn/devtools/45440.html

相关文章

【网络协议Http】Http中get,post,put,delete区别

Http协议 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。 【参考】 GET && POST 对比 关于tcp数据包:对于GET方式的请求,浏览器会把http hea…

Python——cv2 判断图像读取内容是否为空

import cv2 pic_path"xxx.jpg" imagecv2.imread(pic_path) if None image:print("图片为空") else:print("图片不为空")

575. 分糖果

题目 Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i]。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。 医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些…

智能优化算法 | Matlab实现ABC人工蜂群优化算法

智能优化算法 | Matlab实现ABC人工蜂群优化算法 文章目录 智能优化算法 | Matlab实现ABC人工蜂群优化算法文章概述源码设计文章概述 智能优化算法 | Matlab实现ABC人工蜂群优化算法。 源码设计 function BestCost = ABC(fhd,funcNum,nPop,MaxIt,Lb,Ub,dim

android源码下载编译模拟器运行

安卓aosp源码下载,编译,模拟器运行 virtualbox7 安装ubuntu20.04,ubuntu22.04 编译android aosp 源码可以,但是模拟器跑不了,哪个版本都是要么黑屏,要么整个vbox虚拟机闪退。解决方案使用vmware17 ##拯救…

SQL入门全攻略(一)

一、引言 在当今的数据驱动世界中,SQL(结构化查询语言)无疑是数据处理和分析的基石。无论你是数据科学家、数据库管理员还是业务分析师,掌握SQL都是必不可少的技能。本文将带你从SQL的基础知识开始,逐步深入&#xff…

springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制

springboot结合redis发送短信验证码,实现限制发送操作 前言(可忽略)实现思路正题效果图示例手机号不符合规则校验图成功发送验证码示例图redis中缓存随机数字验证码,2分钟后失效删除redis缓存图验证码有效期内 返回禁止重复发送图验证码24小时内发送达到3次&#xf…

Java网络编程从入门到精通:深入探索与实践指南

Java网络编程从入门到精通:深入探索与实践指南 在数字化时代的浪潮中,Java网络编程已成为连接世界的桥梁。本文将从四个方面、五个方面、六个方面和七个方面,带你领略Java网络编程的魅力,助你实现从入门到精通的飞跃。 四个方面…