吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1272|回复: 21
上一主题 下一主题
收起左侧

[Python 原创] 下载多本电子书的图片,再合并为一个个的pdf

  [复制链接]
跳转到指定楼层
楼主
zjg121 发表于 2024-4-15 22:41 回帖奖励
据说这样子的代码更美观耐看。下面代码是针对固定网站的硬编码,不通用。
第一步下载图片

import os
import requests
from requests.exceptions import RequestException
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

def create_folder(folder_name):
"""创建文件夹,如果文件夹已存在则不执行任何操作"""
if not os.path.exists(folder_name):
os.makedirs(folder_name)

def download_image(url, save_path):
"""下载图片并保存到指定路径,同时附带headers"""
try:
response = requests.get(url, stream=True)
response.raise_for_status()  # 如果请求失败,抛出HTTPError异常
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
except RequestException as e:
print(f"请求图片时发生错误: {e}")
except Exception as e:
print(f"保存图片时发生错误: {e}")

# 示例用法

driver = webdriver.Edge()
driver.maximize_window()
sh = [117009, 117023, 117067, 117109, 117184]
ljs = []
for s in sh:
lj = f'http://www.wujiangtong.com/FZG/webPage/FZG_Book_Pic.aspx?id={s}'
ljs.append(lj)

for link in ljs:
print('\n', link)
driver.get(link)
sleep(3)
bt = driver.title
imagefolder = f"d:/a/{sh[ljs.index(link)]}{bt}"  # 图片文件夹名
create_folder(image_folder)  # 创建图片文件夹
n = len(driver.find_elements(By.XPATH, '//*[@id="fb7-slider"]/li'))
for i in range(1, n + 1):
img = f'http://wjtimages.wjhistory.com/wjt/book/人物/{bt}/color/{i}.jpg@!wjt_book-v'
print(img)
save_path = os.path.join(imagefolder, f"image{str(i).zfill(3)}.jpg")
download_image(img, save_path)

driver.quit()






第二步文件夹下的子文件夹里的jpg合并为pdf

import os
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

def merge_images_to_pdf(image_dir, pdf_dir):

确保PDF目录存在

if not os.path.exists(pdf_dir):
    os.makedirs(pdf_dir)

    # 遍历图片目录中的所有文件和子目录
for root, dirs, files in os.walk(image_dir):
    # 过滤出图片文件(这里假设图片是.jpg或.png格式)
    image_files = [f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff', '.gif'))]

    # 如果当前目录有图片文件
    if image_files:
        # 构建相对于源目录的相对路径
        rel_path = os.path.relpath(root, image_dir)
        # 构建PDF文件的路径
        # pdf_path = os.path.join(pdf_dir, rel_path)
        pdf_path = pdf_dir
        # 如果PDF目录的相应子目录不存在,则创建它
        if not os.path.exists(pdf_path):
            os.makedirs(pdf_path)
            # 构建PDF文件的完整路径和名称(假设与目录名称相同,但扩展名为.pdf)
        pdf_file_name = os.path.join(pdf_path, os.path.basename(root) + '.pdf')

        # 创建PDF文件并添加图片
        c = canvas.Canvas(pdf_file_name, pagesize=letter)
        image_width, image_height = letter
        for image_file in image_files:
            image_path = os.path.join(root, image_file)
            c.drawImage(image_path, 0, 0, width=image_width, height=image_height)
            c.showPage()  # 开始新页面以放置下一张图片
        c.save()  # 保存PDF文件

使用示例

source_dir = 'd:/a'  # 源目录,包含图片和子目录
destination_pdf_dir = 'd:/b'  # 目标PDF目录

merge_images_to_pdf(source_dir, destination_pdf_dir)

免费评分

参与人数 4吾爱币 +3 热心值 +4 收起 理由
huhu9999 + 1 + 1 谢谢@Thanks!
0120 + 1 + 1 谢谢@Thanks!
dhwl9899 + 1 + 1 谢谢@Thanks!
lgc81034 + 1 谢谢@Thanks!

查看全部评分

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

推荐
kexing 发表于 2024-4-16 08:35
imagefolder  or  image_folder

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zjg121 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!

查看全部评分

推荐
huhu9999 发表于 2024-4-25 14:29
感谢!PY程序,先复制下来,然后研究研究,好像可以改成一个自动做PDF的软件,特别是做工程资料PDF。
沙发
qiguanghui8817 发表于 2024-4-16 00:16
3#
dhwl9899 发表于 2024-4-16 05:09
这个也是笨办法了,谢谢分享。
4#
大器晚成0125 发表于 2024-4-16 06:24
非常不错,谢谢分享。
5#
cjy2323 发表于 2024-4-16 07:22
还可以,先下载慢慢研究,感谢楼主分享
6#
wyesheng 发表于 2024-4-16 07:52
膜拜大神,不管咋样,比我会编程,哈哈。
7#
Wapj_Wolf 发表于 2024-4-16 08:02
又见PY源码,拷贝下来试试。
8#
linlinxiaolinli 发表于 2024-4-16 08:27
点赞,这也是一个很不错的方法
10#
HNMR 发表于 2024-4-16 08:45
学习一下,感谢大佬分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-29 23:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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