不忘记你的眼睛 发表于 2024-10-31 21:01

python第三方下载库求助

各位大佬,有没有好用的第三方下载库呢,是C端GUI的问题,我用DrissionPage的对象返回下载进度,不能直接用于QProgress的setValue,但是自己封装requests又显得重复造轮子{:1_907:},百度也没找到其他的下载库。
有无大佬解惑,还是说我DrissionPage使用方法错误导致返回的不是正确的浮点值?

Satifer 发表于 2024-11-5 11:03

https://drissionpage.cn/download/browser/
可以看看官方例子,感觉是类型转换不正确,发发完整代码出来看看

不忘记你的眼睛 发表于 2024-11-8 20:49

Satifer 发表于 2024-11-5 11:03
https://drissionpage.cn/download/browser/
可以看看官方例子,感觉是类型转换不正确,发发完整代码出来 ...

f = download_file()
f.add(file_url=url,goal_path=download_path)
print(f.rate)
self._signal_bus.setting_download_file_set_progress.emit(f.rate)
logger.info(f"{f.file_name} 下载完成")
这个,不管是print还是信号传递的.都是None

不忘记你的眼睛 发表于 2024-11-8 20:54

Satifer 发表于 2024-11-5 11:03
https://drissionpage.cn/download/browser/
可以看看官方例子,感觉是类型转换不正确,发发完整代码出来 ...

而且根据官方文档,加了show_msg=True之后,print(f.rate)有值了,但是他是console打印且阻塞的,最后信号激活过去就是100.
而用requests模块就会一直回调信号方法,展现过程进度
            with requests.get(download_url, stream=True, timeout=10) as response:
                response.raise_for_status()# 如果请求返回了一个错误状态,将引发HTTPError
                total_size_in_bytes = int(response.headers.get('content-length', 0))
                chunk_size = 1024# 1KB per chunk
                progress_bar_size = total_size_in_bytes / 100

                # 以二进制模式打开文件
                with open(file_name, "wb") as file:
                  for chunk in response.iter_content(chunk_size=chunk_size):
                        if chunk:# 确保不处理keep-alive新块
                            file.write(chunk)
                            self.update_progress.emit(int((file.tell() / progress_bar_size)))

NCBM 发表于 2024-11-18 00:23

不忘记你的眼睛 发表于 2024-11-8 20:49
f = download_file()
f.add(file_url=url,goal_path=download_path)
print(f ...

大概看了一下,似乎是追踪的对象不对。f.add(...) 的返回值才是当前任务的状态对象,应该用 task = f.add(...) 然后追踪 task.rate 而不是 f.rate。
页: [1]
查看完整版本: python第三方下载库求助