【超实用】爬取2000+免费PPT模板(新手向)

网上的免费ppt模板很多,但是当需要使用的时候,一个个去搜寻下载实在是很麻烦,那么为什么不直接寻找一个免费的ppt模板网站,把其免费的PPT模板都爬取下载,需要使用的时候直接挑选即可



网页层次分析

我选取的免费的ppt模板网址是http://www.ypppt.com/moban/

在这里插入图片描述在这里插入图片描述在这里插入图片描述从以上截图可以看出,这是个典型的三层结构

第一层是全部的ppt的列表
第二层是ppt的详情页,在详情页内有下载链接的入口
第三层是我们最终的目标层,存在下载链接

在这里插入图片描述由第一层的链接可以看出翻页非常简单,只要定位到最后一页,循环遍历即可

流程图

在这里插入图片描述

代码展示

我用的是scrapy,以下给主体部分的代码。用scrapy十分高效,总共2000+的PPT下载链接在一分钟内就全部爬好了。当然这也跟这个网站没有反爬是分不开的,当然如果不是很着急最后设置一下延时,攻击到网站就不好了

# -*- coding: utf-8 -*-
import scrapy
import re
from ppt_get.items import pptdownload_url


class PptSpider(scrapy.Spider):
    name = 'ppt'
    allowed_domains = ['ypppt.com']
    start_urls = ['http://www.ypppt.com/moban/']
    page_num = 0
    base_url = 'http://www.ypppt.com'

    def parse(self, response):
        self.page_num = response.xpath('//div[@class="page-navi"]/a[11]/@href').re_first('\d+')
        yield scrapy.Request(url='http://www.ypppt.com/moban/',callback=self.first_deep)
        for i in range(2,int(self.page_num)+1):
            yield scrapy.Request(url = 'http://www.ypppt.com/moban/list-{}.html'.format(i),callback=self.first_deep)
    
    def first_deep(self, response):
        url_list = response.xpath('//ul[@class="posts clear"]/li/a[2]/@href').extract()
        for i in url_list:
            yield scrapy.Request(url=self.base_url+i,callback=self.second_deep)
    
    def second_deep(self, response):
        url = response.xpath('//div[@class="button"]/a/@href').extract_first()
        yield scrapy.Request(url=self.base_url+url,callback=self.third_deep)
    
    def third_deep(self, response):
        item = pptdownload_url()
        download_url = response.xpath('//ul[@class="down clear"]/li/a/@href').extract()
        for i in range(len(download_url)):
            if 'http://' not in download_url[i]:
                download_url[i] = self.base_url + download_url[i]
        item['download_url'] = download_url
        title = response.xpath('//div[@class="de"]/h1/text()').extract_first().strip(' - 下载页')
        item['title'] = title
        yield item

结果展示

在这里插入图片描述
github完整项目地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值