requests实现全自动下载PPT模板

requests

http://www.1ppt.com/moban/ 可以免费的下载PPT模板,当然如果要人工一个个下,还是挺麻烦的,我们可以利用requests轻松下载

访问这个主页,我们可以看到下面的样式
moban

点每一个PPT模板的图片,我们可以进入到详细的信息页面,翻到下面,我们可以看到对应的下载地址

download

点击这个下载的按钮,我们便可以下载对应的PPT压缩包

那我们就开始做吧
首先,查看网页的源代码,我们可以看到每一个显示的li都有对应的PPT详细的链接,我们只要访问这个链接,然后找到按钮下载即可

source

首先导入相关的库

# 导入requests库
import requests
# 导入正则库进行信息提取
import re 

获取网页源代码

url = "http://www.1ppt.com/moban/"

# 设置请求头
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}

r = requests.get(url, headers=header)

try:
    # 如果请求失败的话进行处理
    r.raise_for_status()
except:
    print(f"请求 {r.url} 失败")
else:
    r.encoding = r.apparent_encoding
    html = r.text

提取对应的网址

# 先获取整个 tplist
tplist = re.findall(r'<ul class="tplist">(.*?)</ul>', html, re.S)[0]

tplist

# 每一个li元素中包含多个需要的 链接,我们取第一个即可
# 获取界面中需要的所有的链接
link_list = re.findall(r"<li>.*?<a href=\"(.*?)\"", tplist)

到详细网址里面找到下载地址

download


for link in link_list:
    if not link.startswith("http"):  # 如果不是绝对地址
        link = "http://www.1ppt.com" + link
    response = requests.get(link, headers=header)  # 请求对应的地址
    try:
        response.raise_for_status()
    except:
       print(f"请求 {response.url} 失败")
    else:
        link_text = response.text 
        download_url = re.findall(r"<ul class=\"downurllist\">.*?<li.*?href=\"(.*?)\".*?</li>.*?</ul>",link_text, re.S)[0]

下载对应的文件

ppt = requests.get(download_url, headers=header) # 请求对应的文件
filename = re.findall(r"<title>(.*?)</title>", link_text, re.S)[0] # 文件名,亦可以自定义,但不能重复
with open(filename+".zip", "wb") as f: # 以二进制的形式写入文件
    f.write(ppt.content)

当然这只是第一页,我们还可以对其他页面的PPT进行下载
我们随机访问几个页面,发现其url如下:

http://www.1ppt.com/moban/ppt_moban_6.html
http://www.1ppt.com/moban/ppt_moban_7.html

然后试试一个页面也满足这个方式,所以我们只需要进行一个循环,不断访问下载即可

比如:

num = 1
while True:
  downloadPPT(url="http://www.1ppt.com/moban/ppt_moban_{}.html".format(num))
  num+=1

如果中间报错,直接停下来即可

源码下载,可以回复PPT

cyberist

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值