Python新手爬虫三:爬取PPT模板
程序员文章站
2022-04-16 07:55:51
爬取网站:第一PPT(http://www.1ppt.com/) 此网站真的良心 大写的牛 老样子,先上最后成功的源码: import requests import urllib import os from bs4 import BeautifulSoup from fake_useragent ......
爬取网站:第一ppt() 此网站真的良心 大写的牛
老样子,先上最后成功的源码:
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 库,具体代码还是往上翻一翻吧。
具体流程就这么几步了,剩下的就是循环 循环 再循环......
循环语句写好,就大功告成了!一起努力。
上一篇: PHP 常用 字符串 函数详解
下一篇: Warshall关系传递闭包
推荐阅读
-
python网络爬虫之解析网页的XPath(爬取Path职位信息)[三]
-
Python爬虫--喜马拉雅三国音频爬取
-
【爬虫学习三】 Python将爬取的数据存储到MongoDB中
-
Python新手爬虫二:爬取搜狗图片(动态)
-
Python新手爬虫三:爬取PPT模板
-
python网络爬虫之解析网页的XPath(爬取Path职位信息)[三]
-
Python爬虫——实战三:爬取苏宁易购的商品价格
-
Python爬虫:第三章 数据解析 example3 正则解析-分页爬取-爬取糗事百科所有页图片(12)
-
python 网络爬虫第三章-爬取*(2)
-
Python爬虫:第三章 数据解析 example1 爬取图片(10)