-
python入门教程之Python新手爬虫三:爬取PPT模板
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
爬取网站:第一PPT(http://www.1ppt.com/) 此网站真的良心 大写的牛
老样子,先上最后成功的源码:
import requests
import urllib
import os
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
def getPPT(url):
f = requests.get(url,headers=headers) #发送GET请求
f.encoding = f.apparent_encoding #设置编码方式
soup1 = BeautifulSoup(f.text,'lxml')
classHtml = soup1.find('div',class_="col_nav i_nav clearfix").select('a') #在html中寻找类别
for i in classHtml[:56]:
classUrl = i['href'].split('/')[2] #将ppt模板类别关键词存到classUrl
if not os.path.isdir(r'D:\PPT\\'+i['title']): #判断有无此目录
os.mkdir(r'D:\PPT\\'+i['title']) #若无,创建此目录。
else:
continue #若有此目录,直接退出循环,就认为此类别已经下载完毕了
n = 0
for y in range(1,15): #假设每个类别都有14页ppt(页数这一块找了很久,没找到全部获取的方法,只能采取此措施)
pagesUrl = url+i['href']+'/ppt_'+classUrl+'_'+str(y)+'.html'
a = requests.get(pagesUrl,headers=headers)
if a.status_code != 404: #排除状态码为404的网页
soup2 = BeautifulSoup(a.text,'lxml')
for downppt in soup2.find('ul',class_='tplist').select('li > a'): #获取下载界面的URL
b = requests.get(url+downppt['href'],headers=headers)
b.encoding = b.apparent_encoding #设置编码类型
soup3 = BeautifulSoup(b.text,'lxml')
downList = soup3.find('ul',class_='downurllist').select('a') #获取下载PPT的URL
pptName = soup3.select('h1') #ppt模板名称
print('Downloading......')
try:
urllib.request.urlretrieve(downList[0]['href'],r'D:\PPT\\'+i['title']+'/'+pptName[0].get_text()+'.rar') #开始下载模板
print(i['title']+'type template download completed the '+str(n)+' few.'+pptName[0].get_text())
n += 1
except:
print(i['title']+'type download failed the '+str(n)+' few.')
n += 1
if __name__ == '__main__':
headers = {'user-agent':UserAgent().random} #定义请求头
getPPT('http://www.1ppt.com')
效果图:
逻辑其实挺简单的,代码也不算复杂。
代码基本都有注释,先一起捋一遍逻辑吧,逻辑搞清楚,代码不在话下。
1、首先网站首页:F12—>选择某个类别(比如科技模板)右击—>检查—>查看右侧的html代码
发现类别的URL保存在 <div class="col_nav" i_nav clearfix> 下的 <li> 标签里的 <a> 标签的 href 属性值中
于是想到用 BeautifulSoup 库的 find() 方法和 select() 方法
2、进入类别界面
同样:F12—>选择某个PPT(例如第一个)右击—>检查—>查看右侧html代码
照葫芦画瓢,继续获取进入下载界面的URL,方法同上
但在此页面需要注意的是,下边有选页标签:
我暂时没有想到准确获取一共有多少页的方式,所以我在此代码中选择用range()函数来假设每个类别都有14页,然后再进行一步判断,看返回的http状态码是否为200。
3、进入具体PPT的下载界面
与上操作相同,获取最终PPT的下载URL
我在此代码中选择用 urllib 库来进行下载,最终将相对应类别的PPT放置同一文件夹中。
文件夹操作我是调用 os 库,具体代码还是往上翻一翻吧。
具体流程就这么几步了,剩下的就是循环 循环 再循环......
循环语句写好,就大功告成了!一起努力。
栏目列表
最新更新
如何使用OS模块中的stat方法
Python os 模块
seek() 方法
python打开文件实例1
Python写入文件
什么是流?
文件操作如何进制逐行读取
Python相对路径
with创建临时运行环境
Python文件操作
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
access教程之Access简介
mysql 安装了最新版本8.x版本后的报错:
Mysql空间数据&空间索引(spatial)
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能