From 5ebf1e8ad24759434cd6984b4d7e185f64d87fe2 Mon Sep 17 00:00:00 2001 From: mei Date: Tue, 11 Feb 2025 15:16:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..e5fbe51 --- /dev/null +++ b/main.py @@ -0,0 +1,52 @@ +import os +import requests +from concurrent.futures import ThreadPoolExecutor, as_completed +import turtle +import time +import tkinter as tk +from tkinter import simpledialog, messagebox +import threading +def download_image_chunked(url, image_dir, image_name): + response = requests.get(url, stream=True) + if response.status_code == 200: + file_path = os.path.join(image_dir, image_name) + with open(file_path, 'wb') as f: + for chunk in response.iter_content(chunk_size=8192): # 8192 bytes per chunk + if chunk: + f.write(chunk) + print(f"Image saved as {file_path}") + else: + print("Failed to download the image.") +def submit_tasks_with_delay(executor, url, image_dir, count, interval): + for i in range(count): + image_name = f'image_{i}.png' + # 使用一个单独的线程来等待,并在等待后提交任务 + threading.Timer(interval * i, executor.submit, args=(download_image_chunked, url, image_dir, image_name)).start() +def main(url, image_dir, count, interval): + if not os.path.exists(image_dir): + os.makedirs(image_dir) + # 显示开始消息 + messagebox.showinfo("开始", "开始拉取,将保存在Image文件夹中") + # 初始化线程池 + with ThreadPoolExecutor(max_workers=64) as executor: + # 使用一个单独的线程来逐个提交任务,并添加间隔 + submit_tasks_with_delay(executor, url, image_dir, count, interval) + # 等待所有任务完成(由于我们使用了Timer,这里没有直接的方式等待所有任务) + # 但我们可以等待足够长的时间,或者添加其他逻辑来检查任务是否完成 + time.sleep(interval * count) # 这只是一个示例,可能并不准确 + # 显示结束消息(注意:这可能会提前显示,因为不能保证所有任务都已完成) +def delayed_download(url, image_dir, image_name, interval): # 添加一个带延迟的下载函数 + time.sleep(interval) # 等待指定的时间间隔 + download_image_chunked(url, image_dir, image_name) +def get_input(): + root = tk.Tk() + root.withdraw() # 隐藏主窗口 + url = simpledialog.askstring("输入", "请输入要爬取的链接:", parent=root) + count = simpledialog.askinteger("输入", "请输入要爬取图片的数量:", parent=root) + interval = simpledialog.askfloat("输入", "请输入图片下载间隔(秒):", parent=root) # 添加间隔输入 + if url and count > 0 and interval >= 0: # 确保间隔是非负的 + main(url, 'Image', count, interval) # 调用main函数时传入interval参数 + else: + messagebox.showerror("错误", "无效的输入,请重新输入。") +if __name__ == "__main__": + get_input() \ No newline at end of file