教学立方pdf课件下载

@author--HCF


方式一
环境安装
pip install requests os shutil multiprocessing img2pdf shutil re
  • requests库用于爬虫获取网页数据
  • os, shutil库用于文件操作(代码中os库用于创建文件夹,shutil库用于删除文件夹)
  • multiprocessing库用于异步爬虫,使用线程池加快下载速度
  • img2pdf库用于将图片合并为pdf文件
  • re库用于正则匹配,在代码中获取一个通用的url
参数设置

首先获取图片url,进入想下载的pdf页面,如下图
在这里插入图片描述
在当前页面中右键选择检查,然后点击弹出窗口的左上角进行元素定位在这里插入图片描述
点击之后在原来页面中点击pdf界面,然后会定位到鼠标所在的标签,如图中所示
通过上面的定位可以发现img标签,里面的src属性则是我们想要的图片url,双击复制即可。

为确保程序正常运行,我们还需要设置图片数量,即
在这里插入图片描述
并在代码中修改文件名称。修改了上面三个地方就可以获取到pdf了!

代码
import requests
import os
from tqdm import tqdm
from multiprocessing.dummy import Pool
import time
import img2pdf
import shutil
import re

# ========================以下地方需要修改====================
total_page = 70
pdf_name = "pdfName"
url = "https://xxxxxxxxxxxxxxx/0.png?xxxxxxxxxxxxxxxxx"
# ========================以上地方需要修改====================

# UA伪装
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
}

def get_image(url_dict):
    new_url = url_dict['url']
    img_name = url_dict['img_name']
    data = requests.get(url=new_url, headers=headers).content
    with open(img_name, 'wb') as fp:
        fp.write(data)

def main():
    # 判断文件名是否以.pdf结尾
    global pdf_name
    if not pdf_name.endswith('.pdf'):
        pdf_name = pdf_name + '.pdf'

    # 新建一个文件夹用于存放每张图片
    img_path = "./tmp_data"
    if not os.path.exists(img_path):
        os.mkdir(img_path)

    # 获取一个通用的url
    global url
    url = re.sub(r'\d+\.png\?', '{0}.png?', url)

    # 所有图片相关信息-url和名称
    url_list = [{"url": url.format(i), "img_name": img_path + '/%03d' % (i + 1) + '.png'} for i in range(total_page)]

    # # 单线程下载
    # for i in tqdm(range(total_page)):
    #     new_url = url.format(i)
    #     img_name = img_path + '%03d' % (i + 1) + '.png'
    #     data = requests.get(url=new_url, headers=headers).content
    #     with open(img_name, 'wb') as fp:
    #         fp.write(data)

    # 线程池下载
    start_time = time.time()
    pool = Pool(40)
    pool.map(get_image, url_list)
    pool.close()
    pool.join()
    print("图片下载完成!共耗时:%.2fs" % (time.time() - start_time))

    # 将下载的所有图片合并为pdf
    start_time = time.time()
    photo_list = [(img_path + '/%03d' % (i + 1) + '.png') for i in range(total_page)]
    a4inpt = img2pdf.mm_to_pt(794), img2pdf.mm_to_pt(1122)
    # layout_fun = img2pdf.get_layout_fun(a4inpt)
    with open(pdf_name, "wb") as fp:
        fp.write(img2pdf.convert(photo_list))
    print("PDF合成完成!共耗时:%.2fs" % (time.time() - start_time))

    # 删除图片
    shutil.rmtree(img_path)

if __name__ == "__main__":
    main()

注意事项
  • 此代码仅供参考,非必要不建议传播老师课件,后果自负
  • 代码仅针对发布的pdf文件,其他文件的爬取可以使用类似方法
  • 代码有待改进,有空再来

方式二

使用selenium库模拟浏览器操作,具体可参考这里


方式三

直接在所需pdf页面右键打开抓包工具(点击检查),然后点击网络,再点击弹出界面的左上角的第二个图标清除接收到的数据包,再点击刷新,重新抓取数据包,然后随便点击一个数据包,按Ctrl+F搜索文件,此时会弹出搜索框
在这里插入图片描述
输入pdf?然后Enter点击对应的数据包,之后会显示数据包详细信息,点击预览并找到里面的path属性,后面对应的url就是我们想要的文件的地址,复制然后在新的页面中打开即可自动弹出下载页面,之后则可下载。
在这里插入图片描述

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值