利用requests自动下载ppt模板

苦于没有PPT模板,Python帮你解决:

import urllib.request as req
from bs4 import BeautifulSoup

import requests
import os
import time
import threading
# from multiprocessing import Pool

class PPT():
    """
    整个的爬虫类
    """

    def __init__(self):
        self.baseUrl = "http://www.ypppt.com/moban/"
        self.header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}
        self.num = 0
        self.page_count = 0
        
    def getResponseContent(self, url):
        """
        获取页面请求信息
        """
        try:
            req_str = req.Request(url, headers=self.header)
            response = req.urlopen(req_str, timeout = 10)
        except Exception as e:
            print(e)
            print("请求失败")
        else:
            return response.read().decode("utf-8")
    

    def getPageInfo(self, url):
        """
        获取页面数量
        """
        html = self.getResponseContent(url)
        soup = BeautifulSoup(html, "html.parser")
        
        page_info = soup.find("div", attrs={"class": "page-navi"})
        a_list = page_info.find_all("a")
        last_a = a_list[-1]
        href = last_a["href"]
        page_count = href.replace("list-", "").replace(".html", "")

        self.page_count = int(page_count)

    def spider(self, url):
        """
        解析页面
        """
        html = self.getResponseContent(url)
        soup = BeautifulSoup(html, "html.parser")
        divs = soup.find_all("div", attrs={"class":"wrapper"})
        
        div = divs[1]

        ul = div.find_all("ul")[3]
        li_list = ul.find_all("li")
        ppt_link_list = []
        for li in li_list:
            aTag_href = li.find_all("a")[1]["href"]
            ppt_link = "http://www.ypppt.com" + aTag_href
            ppt_link_list.append(ppt_link)
            self.PPT_info(ppt_link)

            # self.PPT_info(ppt_link)
            threads = []
            if len(threads) < 5:
                threads.append(threading.Thread(target=self.PPT_info,args=(ppt_link,)))

            for thread in threads:
                thread.start()
                if not threads[0].isAlive():
                    thread.remove(thread)



        # pool = Pool(processes=1)
        # pool.map(self.PPT_info, ppt_link_list)  
        # # 方法, 参数
            

    def PPT_info(self, url):
        """
        PPT 下载页面
        """
        html = self.getResponseContent(url)
        soup = BeautifulSoup(html, "html.parser")
        down_button = soup.find("a", attrs={"class":"down-button"})["href"]
        down_url = "http://www.ypppt.com" + down_button
        self.DL_PPT(down_url)
        time.sleep(1)

    def DL_PPT(self, url):
        """
        下载ppt页面
        """
        html = self.getResponseContent(url)
        soup = BeautifulSoup(html, "lxml")
        ul = soup.find("ul", attrs={"class":"down clear"})
        rar_link = ul.find_all("a")[0]["href"]

        # 个别的ppt下载页面不是绝对地址,需要手动添加
        if rar_link.find(".com") > 0:
            pass
        else:
            rar_link = "http://www.ypppt.com" + rar_link
        ppt_name = soup.find("h1").text
        if ppt_name.find("-") > 0:
            ppt_name = ppt_name.split("-")[0].strip()
        f = requests.get(rar_link, headers = self.header)
        with open(ppt_name + ".rar", "wb") as rar:
            self.num += 1
            print("正在下载第 {} 个PPT模板...".format(self.num))
            rar.write(f.content)
        print(ppt_name, "下载完成......")



if __name__ == "__main__":
    print("Downloadings begin...")
    ppt = PPT()
    start_time = time.time()
    ppt.getPageInfo(ppt.baseUrl)
    # 解析第一个页面,因为其url与之后的有所不同
    ppt.spider(ppt.baseUrl)
   
    for page in range(2, ppt.page_count + 1):
        url = ppt.baseUrl + "list-{}.html".format(page)
        ppt.spider(url)
        time.sleep(1)
        print(url, "下载完成")


    end_time = time.time()
    print("用时: ", end_time-start_time)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.利用操作系统桌面扩展技术及PPT副屏放映模式,软件的管理界面与观众所看到的PPT界面专业分离,分别显示在各自的显示设备中,PPT界面根据管理者的命令进行智能地快速地无缝切换,达到电视台的专业效果。观众看不到操作者的鼠标等管理动作。 2.用户只需要准备好“婚庆.PPT”、“自定义放映PPT、抽奖PPT等文件,即可组织一场专业的婚庆现场,同时,可穿插抽奖环节。一套软件中,婚庆活动PPT画面双屏组织播放、音视频播放及抽奖双屏管理全部搞定。当然,用户通过简单的设置和定制,不但用在婚庆现场,也可以用在节目比赛演出、会议现场管理组织、公司尾牙年会、客户答谢会、产品发布会等其它场合。不需要昂贵的切换设备,即可打造一场廉价而又专业的活动现场。 3.用户准备好一些视频背景素材或Flash背景动画等,即刻打造一场专业的动态婚庆舞台背景。 4.现场操作者可以根据主持人、嘉宾、选手具体场景,即时插入软件内置的经典音效片段,插科打诨,效果极佳! 5.用户修改ppt模板、添加PPT动画等及其方便,用户定制空间相当大。 6.此软件可以替代舞台字幕机(又叫:舞台字幕电子屏、台词电子屏、剧场字幕屏)、LED屏幕显示软件、双屏视频播放工具软件、舞台背景视频专业播放工具等相关软件。 7.抽奖功能的最大特点:多线程平均分区,且并行抽取,避免了普通随机抽取算法容易造成号码集中的问题。抽奖环节可以穿插到节目环节当中,也可以单独进行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值