python下载pdf资源代码

python 复制代码
from datetime import datetime
import requests
import sys
from pyquery import PyQuery as pq
import os
import time
path='./book'
baseUrl = 'http://124.223.24.112:8083'
host = f'{baseUrl}/'
host1=f'{host}book/'
ls=[]
def count_files_in_directory(directory):
    # 统计给定目录中的文件个数
    return len([f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))])
def downBook():
    if not os.path.exists(path):
        os.makedirs(path, exist_ok=True)
    page =7
    headers={
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.40'
    }
    for i in range(1,page+1):
        url = f"http://124.223.24.112:8083/page/${page}?data=root&sort_param=stored"
        content=requests.get(url,headers=headers)
        pq1=pq(content.text).find('.author-name')
        for k in pq1:
            j=host1+k.attrib['href'].split('/')[-1]
            ls.append(j)
    if len(ls):
        for i in ls:
            time.sleep(1)
            childUrl(i)
    num_files = count_files_in_directory(path)
    print(f"所有文件下载完成,'./book' 目录中总共有 {num_files} 个文件。")

def childUrl(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.40'
    }
    content = requests.get(url, headers=headers)
    href2 = pq(content.text).find('#btnGroupDrop1pdf').attr('href')
    if not href2:
        print('没有下载地址')
        return
    bb1 = baseUrl + href2
    js = href2.split('/')[-1]

    # 检查文件是否已存在
    target_file_path = os.path.join(path, js)
    if os.path.exists(target_file_path):
        local_file_size = os.path.getsize(target_file_path)

        response = requests.head(bb1, headers=headers)
        remote_file_size = int(response.headers.get('content-length', 0))

        # 检查本地文件和远程文件的大小是否匹配
        if local_file_size == remote_file_size:
            print(f"文件 {js} 已经存在并且是完整的,跳过下载。")
            return
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    print(f'正在下载 {js} 的书籍,当前时间:{current_time}')
    response = requests.head(bb1, headers=headers)
    file_size = int(response.headers.get('content-length', 0))

    down_size = 0
    progress_len = 100

    bdata = requests.get(bb1, headers=headers, stream=True)

    with open(path + '/' + js, 'wb') as f:
        for chunk in bdata.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
                down_size += len(chunk)
                progress = int(progress_len * down_size / file_size)

                # 格式化文件大小和已下载大小
                formatted_file_size = format_size(file_size)
                formatted_down_size = format_size(down_size)

                sys.stdout.write(f'\r[{"=" * progress}{"~" * (progress_len - progress)}] {progress}% ({formatted_down_size}/{formatted_file_size})')
                sys.stdout.flush()
        # 检查是否下载完成
        if progress == 100:
            print(f'\n下载 {js} 书籍完成')
    print(f'\n下载 {js} 书籍完成')
def format_size(bytes):
    # 将字节转换为更易读的单位(KB、MB等)
    for unit in ['B', 'KB', 'MB', 'GB', 'TB']:
        if bytes < 1024.0:
            break
        bytes /= 1024.0
    return f"{bytes:.2f} {unit}"
if __name__ == '__main__':
    downBook()

最终截图

相关推荐
量化君也5 分钟前
桥水基金全天候策略拆解,构建中国ETF躺平版策略
大数据·人工智能·python·算法·金融·业界资讯
爱吃苹果的梨叔13 分钟前
2026年分布式坐席系统哪家好:指挥中心与调度大厅选型参考
分布式·python
Stick_ZYZ15 分钟前
A2A:让 Agent 从单兵作战走向团队协作
java·开发语言·网络·人工智能·python·ai
weixin_3077791317 分钟前
从切片迷宫到结构化智能:AI Agent解析PDF的完整范式
图像处理·人工智能·python·自动化·ocr
benben04422 分钟前
ONNX从入门到精通大全
人工智能·pytorch·python
程序猿零零漆22 分钟前
Python 基础核心知识总结:函数、文件操作、异常、模块与常用内置模块
python
枫叶林FYL31 分钟前
项目十一:Saga模式分布式旅行预订系统 核心服务实现与Saga编排器
数据库·python·docker
流浪法师解剖鱼33 分钟前
CocosCreator制作推箱子游戏
python·cocos2d
财经资讯数据_灵砚智能38 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月9日
人工智能·python·ai·信息可视化·自然语言处理·ai编程·灵砚智能
仙俊红41 分钟前
深入理解 ThreadLocal —— 从变量引用、强弱引用到 Spring Boot 实战
spring boot·python·算法