python爬取海量PPT模板,再也不用辛苦地找模板了

一、前言

到了大学,经常会因为课外活动,学校活动,团课活动,等一系列活动做一些PPT。经常要找PPT模板来应急(不会还有人自己做PPT模板吧,哈哈哈 ),为了省事,于是,我想到了爬虫,把目标网页全部爬下来,供自己使用。

二、爬取思路

首先,选取目标网页:优品PPT
在这里插入图片描述

接下来,是数据获取的思路

1、解析初始界面数据

2、获取到每个每个PPT对应的li节点

3、获取对应PPT模板的链接和名字

4、进入每个PPT模板的详情界面

5、解析界面

6、获取PPT模板下载页面的链接

7、进入下载页面

8、解析界面获取下载链接

9、完成PPT模板的下载

在这里插入图片描述
图中的xpath分别为:

xpath_1 = '/html/body/div[2]/ul/li'
xpath_2 = '/html/body/div[2]/div[2]/div/div[1]/div[2]/a/@href'
xpath_3 = '/html/body/div[1]/div/ul/li[1]/a/@href'

获取xapth的方法,如图以获取xpath_2为例:
在这里插入图片描述

三、数据爬取

1、导入响应的库
import os
import chardet
import requests
from lxml import etree
from tqdm import tqdm
2、完整代码
# -*- coding: UTF-8 -*-
"""
@Author  :远方的星
@Time   : 2021/5/4 21:17
@CSDN    :https://blog.csdn.net/qq_44921056
@腾讯云   : https://cloud.tencent.com/developer/column/91164
"""
import os
import chardet
import requests
import logging
from lxml import etree
from tqdm import tqdm
from fake_useragent import UserAgent

# 日志输出的基本配置
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')

# 随机产生请求头
ua = UserAgent(verify_ssl=False, path='fake_useragent.json')

path = 'D:/PPT模板'
if not os.path.exists(path):
    os.mkdir(path)


# 随机切换请求头
def random_ua():
    headers = {
        "accept-encoding": "gzip",    # gzip压缩编码  能提高传输文件速率
        "user-agent": ua.random
    }
    return headers


# 得到xpath对应的结果
def get_link(url, xpath):
    response = requests.get(url=url, headers=random_ua())
    response.encoding = chardet.detect(response.content)['encoding']  # 自动转换编码格式,与网页一致
    response = response.text
    html = etree.HTML(response)
    link = html.xpath(xpath)
    return link


# 获取下载链接并下载
def get_zip_url(url):
    xpath_1 = '/html/body/div[2]/ul/li'
    xpath_2 = '/html/body/div[2]/div[2]/div/div[1]/div[2]/a/@href'
    xpath_3 = '/html/body/div[1]/div/ul/li[1]/a/@href'
    a = get_link(url, xpath_1)  # 获取所有的li节点
    for i in tqdm(range(len(a))):  # 对li节点进行遍历
        webpage_url = 'https://www.ypppt.com' + a[i].xpath('./a[1]/@href')[0]  # 获取到第一个链接
        zip_name = a[i].xpath('./a[2]/text()')[0] + '.zip'  # 获取文本,组成待下载文件的文件名
        download_link = 'https://www.ypppt.com' + get_link(webpage_url, xpath_2)[0]  # 获取下载页面
        download_url = get_link(download_link, xpath_3)[0]  # 获取下载链接
        save_path = path + '/' + zip_name  # 图片的保存地址
        res = requests.get(url=download_url, headers=random_ua()).content
        with open(save_path, 'wb') as f:  # 写入文件,即下载
            f.write(res)


def main():
    page = int(input('请输入你想要爬取的页数:'))
    # 网页第一页和之后的地址不是同一个规律,使用条件判断
    for num in range(1, page+1):
        if num == 1:
            url = 'https://www.ypppt.com/moban/'
            logging.info('正在下载第1页模板,请稍等片刻嗷')
            get_zip_url(url)
        else:
            url = 'https://www.ypppt.com/moban/list-{}.html'.format(num)
            logging.info('正在下载第{}页模板,请稍等片刻嗷'.format(num))
            get_zip_url(url)
    logging.info('你所要求的任务,全部都完成喽~')


if __name__ == "__main__":
    main()
3、结果展示

在这里插入图片描述

在这里插入图片描述

四、Blogger’s speech

其实,我是想用python顺便把zip文件解压了,更方便一点,但是我用zipfile成功解压之后,解压文件名出现乱码情况,我在网上找了一些解决方案,没整明白,就不多做解压,以免“画蛇添足”。

如有不足,或者有乱码的解决方法,还请大佬评论区留言或私信我,我会进行补充。

感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。

五、补充(乱码问题已解决)

解包乱码问题解决方案

作者:远方的星
CSDN:https://blog.csdn.net/qq_44921056
腾讯云:https://cloud.tencent.com/developer/column/91164
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

对于爬取豆瓣电影的 PPT,我不是很清楚您所说的是什么,不过我可以为您提供一些关于爬取豆瓣电影的 PowerPoint(PPT)的思路。 1. 确定爬取的页面 首先,需要确定您要爬取的豆瓣电影 PPT 的页面是哪个,比如说是某个电影的详情页面,或者是某个用户上传的 PPT 页面。 2. 分析页面结构 然后,需要分析该页面的结构,出包含 PPT 的 HTML 元素的位置,以及 PPT 文件的链接地址。 3. 发送请求并解析 HTML 接下来,可以使用 Python 的 requests 库发送请求,并使用 BeautifulSoup 库解析 HTML 页面,到包含 PPT 文件的链接地址。 4. 下载 PPT 文件 最后,可以使用 Python 的 requests 库下载 PPT 文件,并保存到本地。 下面是一个简单的 Python 程序,可以用来爬取豆瓣电影的 PPT: ```python import requests from bs4 import BeautifulSoup url = 'https://www.douban.com/' # 发送请求 response = requests.get(url) # 解析HTML soup = BeautifulSoup(response.text, 'html.parser') # 获取PPT列表 ppts = soup.find_all('a', class_='ppt-link') # 遍历PPT列表,获取PPT文件的链接地址并下载 for ppt in ppts: ppt_url = ppt['href'] ppt_name = ppt.text.strip() + '.ppt' ppt_response = requests.get(ppt_url) with open(ppt_name, 'wb') as f: f.write(ppt_response.content) ``` 这个程序会从豆瓣首页爬取 PPT 文件的链接地址,并下载到本地。您可以根据自己的需要修改程序,比如爬取其他页面的 PPT,或者将 PPT 文件保存到指定的文件夹中。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱打瞌睡的CV君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值