文章目录

  • 前言
  • 一,开头
  • 二,获取目录下的模板链接
  • 三,模板的下载链接
  • 四,下载
  • 五,最后

前言

最近正在学习ppt,为了提高设计能力,需要观察大量ppt模板,顺便拿点素材,但一个个下有点麻烦,所以弄了个爬虫节约时间


一,开头

首先,先获得四个目录的url


发现分类的url在ul标签下的li列表里

那么我们先做个开头

import requests
from utils import get_random_browser
from  time import sleep
from lxml import etree
import re
def main():# 我选择分开来爬print("请输入你想下载的东西")s = int(input("1:moban,2:beijing,3:tubiao,4:sucai"))headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36 Edg/86.0.622.38',# 非持久性连接,避免大量连接'Connection': 'close'}url = "http://www.ypppt.com"lst= get_http(url,headers,s)

再爬取分类链接

def get_list(url,header, s):res = requests.get(url,header)html = etree.HTML(res.text)# 刚好s参数能对应每个分类的索引,html.xpath返回的是列表,所以要取索引# attrib就是取属性html_url = html.xpath(f'/html/body/div[1]/div/ul/li[{s+1}]/a')[0].attrib["href"]return url + html_url

二,获取目录下的模板链接


发现还是在ul下的li列表里面的a标签,那么做法跟上次一样

代码如下(示例):

def get_url(url,headers,flag):list = []#目标urlsleep(1)res = requests.get(url, headers=headers)html = etree.HTML(res.text)html_len = len(html.xpath('/html/body/div[2]/ul/li'))for i in range(1,html_len-1):url_xpath = html.xpath(f'/html/body/div[2]/ul/li[{i}]/a[1]')# print(img_xpath[0].attrib["href"])url_a = url_xpath[0].attrib["href"]url1 = "http://www.ypppt.com" + url_alist.append(url1)# 最后返回链接列表return list

但是问题来了
这是第一页链接

这是第二页链接

可见第一页跟第二页以后的链接是不具有连续性(不存在list-1的网页)

那么我们只需要一个if语句来判别就可以了

def main():session = requests.session()print("请输入你想下载的东西")s = int(input("1:moban,2:beijing,3:tubiao,4:sucai"))headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36 Edg/86.0.622.38',#非持久性连接,避免大量连接'Connection': 'close'}url = "http://www.ypppt.com"url1 = get_http(url,headers,s)# for循环的range是选择第几页,读者可以自己额外添加参数for i in range(2,3):if i == 1:url2 = url1else:url2 = f"{url1}/list-{i}.html"url_list = get_url(url2, headers)print(f"正在下载第{i}页")get_dow(url_list,headers)

三,模板的下载链接

在这一步,我们需要提取两个参数,名字和下载链接


由图知,名字在h1标签下,链接在class=button下的a标签

代码如下(示例):

    for url in url_list:res = requests.get(url, headers=headers)res_encoding = res.encoding    #网页编码html = etree.HTML(res.text)name = html.xpath('//div[@class="infoss"]/h1/text()')name = name[0].encode(res_encoding).decode("utf-8")url_dow = html.xpath('//div[@class="infoss"]/div[2]/a')[0].attrib["href"]dow_img(name,url_dow,headers)

有人会好奇为什么有name = name[0].encode(res_encoding).decode(“utf-8”),
encode和decode是做什么的?
首先我们要知道,网页编码有很多种,而文字编码跟随着网页编码,可能跟我们默认的解码器不兼容,会获取到乱码,所以我们要提取文字时,发现乱码的原因或者出现解析错误的时候,一般是解码失败问题…

四,下载


提取链接就没必要说什么,但是难道你想下载的文件是一堆数字命名的吗?
所以我们需要重命名下载文件,而且我们之前已经提取出了文件名字,现在就差文件后缀了.
但是,这网站的文件后缀有zip和rar两种,所以我们需要正则表达式从下载链接中提取文件后缀名

def dow_img(name,url,headers):url = "http://www.ypppt.com" + urlres = requests.get(url, headers=headers)html = etree.HTML(res.text)url_xpath = html.xpath('/html/body/div[1]/div/ul/li[1]/a')[0].attrib["href"]# 对了,部分下载链接是没有加根网站的if not 'http://www.youpinppt.com/' in url_xpath:url_xpath = 'http://www.youpinppt.com' + url_xpathtry:res = requests.get(url_xpath, headers=headers)res.keep_alive = Falsepattern = re.compile(r'zip|rar')houzhui = pattern.findall(str(url_xpath))print(url_xpath)with open(f'ppt/{name}.{houzhui[0]}', 'wb') as f:f.write(res.content)print(name + "下载完成")except IndexError:print(f"异常下载:{name}")except requests.exceptions.ConnectionError:print(f"异常下载:{name}")finally:pass

然后实验下


五,最后

import requests
from time import sleep
from lxml import etree
import redef get_http(url,header, s):res = requests.get(url,header)html = etree.HTML(res.text)html_url = html.xpath(f'/html/body/div[1]/div/ul/li[{s+1}]/a')[0].attrib["href"]return url + html_urldef get_url(url,headers):list = []#目标urlsleep(1)res = requests.get(url, headers=headers)html = etree.HTML(res.text)html_len = len(html.xpath('/html/body/div[2]/ul/li'))for i in range(1,html_len-1):url_xpath = html.xpath(f'/html/body/div[2]/ul/li[{i}]/a[1]')url_a = url_xpath[0].attrib["href"]url1 = "http://www.ypppt.com" + url_alist.append(url1)return listdef get_dow(url_list,headers):for url in url_list:res = requests.get(url, headers=headers)res_encoding = res.encoding    #网页编码html = etree.HTML(res.text)name = html.xpath('//div[@class="infoss"]/h1/text()')name = name[0].encode(res_encoding).decode("utf-8")url_dow = html.xpath('//div[@class="infoss"]/div[2]/a')[0].attrib["href"]dow_img(name,url_dow,headers)def dow_img(name,url,headers):url = "http://www.ypppt.com" + urlres = requests.get(url, headers=headers)html = etree.HTML(res.text)url_xpath = html.xpath('/html/body/div[1]/div/ul/li[1]/a')[0].attrib["href"]if not 'http://www.youpinppt.com/' in url_xpath:url_xpath = 'http://www.youpinppt.com' + url_xpathtry:res = requests.get(url_xpath, headers=headers)res.keep_alive = Falsepattern = re.compile(r'zip|rar')houzhui = pattern.findall(str(url_xpath))print(url_xpath)with open(f'ppt/{name}.{houzhui[0]}', 'wb') as f:f.write(res.content)print(name + "下载完成")except IndexError:print(f"异常下载:{name}")except requests.exceptions.ConnectionError:print(f"异常下载:{name}")finally:passdef main():session = requests.session()print("请输入你想下载的东西")s = int(input("1:moban,2:beijing,3:tubiao,4:sucai"))headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36 Edg/86.0.622.38',#非持久性连接,避免大量连接'Connection': 'close'}url = "http://www.ypppt.com"url1 = get_http(url,headers,s)for i in range(1,2):if i == 1:url2 = url1else:url2 = f"{url1}/list-{i}.html"url_list = get_url(url2, headers)print(f"正在下载第{i}页")get_dow(url_list,headers)if __name__ == '__main__':main()

这是源码,只供参考,另外爬虫练习不要打扰人家网站的正常运行,多加几个sleep也好

其实这代码不算简洁(可能有点小改动),其中的变量名也是乱想的(英语不太好).
还是第一次写这么长…的博客

爬虫练习----PPT模板相关推荐

  1. Python爬虫——下载PPT模板

    Python爬虫--下载PPT模板 1.调用需要库 安装库: Windows + R 输入cmd 后 执行下面这两行 pip install requests pip install lxml imp ...

  2. 【第2篇】Python爬虫实战-PPT模板素材下载

    目标网址: https://www.ypppt.com/ 目录 1.页面结构分析 第①步:解析模板列表 第②步:进入到模板详情页,点击下载 第③步:进入模板下载页,点击下载 2.网站反爬措施 3.编码 ...

  3. ❤️再也不用担心PPT模板下载问题,python爬虫 PPT模板批量下载❤️

    最近工作中要使用PPT,但是模板搞不定怎么办,嘿嘿,直接批量下载,各种模板随便安排. 找了很多PPT模板网站,发现大多数网站都要登陆和vip才可以下载到想要的模板.后来发现这个网站不需要登陆和vip也 ...

  4. 爬虫基础之Python简单爬取实例-----爬取网站的PPT模板

    目录 一.网络爬虫是什么? 二.网站分析 1.进行网站分析: 2.分析完毕,开始反推 三.代码分析 1.引入库 2.网页源码 四.运行结果 五.总结 一.网络爬虫是什么? 网络爬虫(又称为网页蜘蛛,网 ...

  5. 函数头模板_Python新手爬虫,爬取PPT模板

    爬取网站:第一PPT(http://www.1ppt.com/)此网站真的良心大写的牛 先上最后成功的源码: import requests import urllib import os from ...

  6. Python采集ppt素材模板 (多线程版本),答辩、演讲再也不怕没有好用的PPT模板了(含完整源代码)

    本次目的: Python采集ppt素材模板 (多线程版本) 开发环境: Python 3.8 Pycharm 模块使用: requests >>> pip install reque ...

  7. 【日常】python站长素材网免费模板下载(以PPT模板为例)

    近期疲于论文和别人给我挖的坑,可能很长一段时间不会更新博客了. 之前在寻找模板时发现了挺好的网站http://sc.chinaz.com/,上面有PPT,CSS,Bootstrap等许多种类的模板,并 ...

  8. 利用Python下载PPT模板

    import urllib.request as req from bs4 import BeautifulSoupimport requests import os import time impo ...

  9. Python爬取PPT模板(requests+BeautifulSoup+多线程)

    Python爬取PPT模板(requests+BeautifulSoup+多线程) 快到做毕业设计的时间了,得去找点好看的PPT模板了,在http://www.ypppt.com这个网站上发现了很多不 ...

最新文章

  1. 在Excel单元格中使用下拉框
  2. Array.asList:数组转list时你一定要知道的“陷阱”!
  3. Linux系统下基本命令
  4. 当期收益率(Current Yield)
  5. 全视曲面屏设计,三星S8又一次走在了行业创新的最前沿
  6. c++ pat 乙级 --1001 害死人不偿命的(3n+1)猜想
  7. 打车业务下单高并发解决方案
  8. web.config forms节点中的属性的含义和用途
  9. linux内核驱动之 设备驱动简介之内核划分
  10. php json 格式化
  11. hosts文件修改完无效的解决办法
  12. 【已解决】ws2_32.dll丢失怎么办?ws2_32.dll调用失败如何修复
  13. 如何使用(稿定)设计软件无水印
  14. c语言写32位编译器,MinGW32 GCC编译器 V8.1 32位免费版
  15. Java如何与Simon Ritter-JDK 9到13一起发展
  16. python反素数_可逆素数-随心随性无为而为-51CTO博客
  17. ff14 人最多的服务器,记录FF14全服人数最少的服务器红茶川
  18. 还不知道什么是内网穿透吗,今天我带你深刻了解
  19. HTML学生个人网站作业设计:电影网站设计——猫眼电影(9页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  20. arm9+linux s3c2440 触摸屏驱动移植

热门文章

  1. 如何用python画金字塔形状_用Python画小猪佩奇,落叶树和动漫人物
  2. 羊了羊是如何登上热搜的
  3. 前台小姐的八级英语 (中国式英语爆笑版)
  4. openstack镜像上传错误
  5. linux i2c 端口 usb,纬图USB-I2C适配器 主从机 支持Win/Linux/MAC/安卓
  6. 用Python表白,把爱和情书写进程序里
  7. 未间断向提供商品粮 国稻种芯·中国水稻节:江西筑江南粮仓
  8. VScode运行ts文件出现错误Unexpected token ‘export‘
  9. 开发出实现 4W 业内超高额定功率的厚膜分流电阻器“LTR100L”
  10. Android——Theme和Style-由浅入深,全面讲解