(Python爬虫PPT模板)不会吧不会吧这年头还有人自己做ppt吧,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、完整代码
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、结果展示

请添加图片描述

请添加图片描述
代码已经整理打包好了,需要的可以给我留言哦。或者扫一扫+vx联系我。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值