python3.6爬虫案例:爬取某网站所有PPT(上)。

news/2024/5/10 16:55:11/文章来源:https://blog.csdn.net/JiShun_Wang/article/details/79919559

写在前面  

        这次实现之前的flag:爬取第一ppt网站的所有PPT,当然网站中有其他很多的学习资料,这次只爬取PPT。不仅可以平时做模板演示用,还可以练习爬虫,岂不美滋滋。闲话不多说,进入正题。

        先来说下网站(http://www.1ppt.com/)特点,该网站的结构很清晰,但是网站中的链接如果取下来是不能直接输入浏览器访问的,即:防盗链,这带来了不少额外的工作量.首先,我们不能在程序里面进行直接访问文件进行下载(目前我没有找到其他方法,如果有其他解决方案,欢迎留言交流),所以可以将ppt链接爬下来之后批量导入迅雷进行下载,这点需要手工操作,不过还好工作量不会太大,其次,下载的文件是默认的文件名,不能直观上看到ppt的性质、使用场合,如果知道名字我们就能很容易辨别是否使用与自己想用到的场合。不过都有方法来解决。

    由于工作量大,分两篇博客进行。本篇主要介绍在目标网站中爬取所需的文件,下篇介绍批量修改文件名等。事先透漏下,最后的文件初步估计大约12G,演示的时候没有爬完,所以根据链接数量,文件大小估算了下。(#^.^#)

下面开始撸起来。思路看下面的小标题吧。

一、爬取网站首页主题名称及链接同时创建本地结构文件夹

我们来观察下网站:


打开这些主题发现,图中有七个主题:PPT模板、行业PPT……PPT下载共七个主题里面有不同类目的PPT可供我们爬取。很容易看到这些主题名称与连接元素所在的位置。这步比较简单,py文件为CrawlShouYe.py,代码如下:

#首先爬取类别链接并创建大类文件夹
import requests
import os
from bs4 import BeautifulSoup as bsURL = 'http://www.1ppt.com/'
FILE = 'f:\\python program\\ppt'
#获取网页信息
def get_html(url):html = requests.get(url)html.encoding = 'gb2312'soup = bs(html.text, 'lxml')return soup#创建新的文件夹
def creatFile(element):path = FILEtitle = elementnew_path = os.path.join(path, title)if not os.path.isdir(new_path):os.makedirs(new_path)return new_path
def main():content = get_html(URL)div = content.find('div',{'id':'navMenu'})#定位到链接所在位置li_all = div.find_all('li')with open('f:\\python program\\ppt\\url.txt','w') as f:for li in li_all:li_a = li.find('a')link = URL+li_a['href']name = li_a.textcreatFile(name)f.write(name+';'+link+'\n')print('结束!')
if __name__ == "__main__":main()

这里需要额外说明的是创建主题文件夹我们可以通过代码,也可以打开某路径下的要创建的文件,如果文件夹不存在就自动创建。运行程序的效果:


二、下载每个主题下的栏目中的PPT链接,同时创建每个栏目文件夹以及栏目下所有模板链接文本文件。


这时栏目在网页中的位置,找到其标签。我们继续观察每个栏目下面的模板的特点。


上图我打开了动态栏目下的第二页,大家可以发现页码的格式,多打开几页就能很容易构造出跳转页面的链接格式,同时发现所有的模板名称与连接存在于<ul class='tplist'>中,在程序中将这两项内容抓下来存入当前栏目文件夹下的url.txt文件中。最终形成CrawlZipLink.py文件,代码如下:

#首先爬取类别链接并创建大类文件夹
import requests
import os
import time
from bs4 import BeautifulSoup as bsURL = 'http://www.1ppt.com/'
FILE = 'f:\\python program\\ppt'
header = {'Referer':'http://www.1ppt.com/','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3964.2 Safari/537.36'
}
#获取网页信息
def get_html(url):html = requests.get(url, headers=header)html.encoding = 'gb2312'soup = bs(html.text, 'lxml')return soup#创建新的文件夹
def creatFile(element, FILE=FILE):path = FILEtitle = elementnew_path = os.path.join(path, title)if not os.path.isdir(new_path):os.makedirs(new_path)return new_path
#判断文件名
def judgeName(name):fh = ['?','\\','/',':','*','"','<','>','|']for fh_ in fh:if fh_ in name:name = name.replace(fh_, '_')return namedef CrawModel(new_path,url):#用于爬取每个类目下的ppt模板\f = open(new_path+'\zip_url.txt','w', encoding='utf-8')page_num = 1flag = True #控制跳出循环while True:struct_url = url.split('/')[-2]curl = url+'/ppt_'+struct_url+'_'+str(page_num)+'.html'print(time.ctime()+";爬取"+curl+"页")try:#构造正确地址,共三种情况page = get_html(curl)ul = page.find('ul',{'class':'tplist'})li = ul.find_all('li')except:try:curl = url+struct_url+'_'+str(page_num)+'.html'page = get_html(curl)ul = page.find('ul', {'class': 'tplist'})li = ul.find_all('li')except:#此种情况是栏目下只有一页,网址不用构造直接使用curl = urlpage = get_html(curl)flag = False# print(curl)try:ul = page.find('ul',{'class':'tplist'})
#             print(ul)li = ul.find_all('li')i_num = 1for i in li:print(time.ctime()+";打印"+str(page_num)+"第"+str(i_num)+"个ppt")h2 = i.find('h2')href = h2.find('a')['href']name = h2.textzip_content = get_html(URL+href)zip_href = zip_content.find('ul',{'class':'downurllist'}).find('a')['href']f.write(name+';'+zip_href+'\n')time.sleep(0.2)i_num += 1ErrNum = 0page_num += 1except:ErrNum += 1if ErrNum < 3:#容忍度为3,通过观察很少有连续两张链接不存在的,设置为3是合理的page_num += 1 #跳转到下一个链接continueelse: #若是链接已经到达最后一个,超出容忍度后结束print('结束')breakif not flag:breakf.close()
def main():f_input_url =open('f:\\python program\\ppt\\url.txt','r')line = f_input_url.readline().strip()while line:line_tuple = line.split(';')path_leimu = line_tuple[0]url_leimu = line_tuple[1]#一行,创建每个类目下的栏目文件夹f_input_lanmu = open(FILE+'\\'+path_leimu+'\\url.txt', 'r')line_lanmu = f_input_lanmu.readline().strip()while line_lanmu:line_lanmu_tuple = line_lanmu.split(';')path_lanmu = line_lanmu_tuple[0]url_lanmu = line_lanmu_tuple[1]print(FILE+'\\' +path_leimu+'\\' +path_lanmu,url_lanmu)# print('------'+path_lanmu)path_lanmu = judgeName(path_lanmu)path_cell = creatFile(path_lanmu, FILE=FILE+'\\' +path_leimu+'\\')#爬取模板CrawModel(path_cell,url_lanmu)#         print(path_cell)line_lanmu = f_input_lanmu.readline().strip()f_input_lanmu.close()line = f_input_url.readline().strip()
if __name__ == "__main__":main()

好多细节性的东西,大家多看几遍程序理解下吧,如果有问题欢迎留言交流(程序个人感觉不够精炼)。运行程序之后的文件夹结构与zip_url.txt文件内容如下系列图。(≧∇≦)ノ




三、提取只含ppt模板链接的链接。

提取不含ppt名称的链接存入zip.txt文件中。这样方便批量导入迅雷进行下载。代码文件为Creat_zipLink.py,代码如下:

#打开类目url,选中文件夹
def split_(string):st = string.strip().split(';')return st
#处理文件夹名称
def judgeName(name):fh = ['?','\\','/',':','*','"','<','>','|']for fh_ in fh:if fh_ in name:name = name.replace(fh_, '_')return name
def main():f_input = open("F:\\python program\\ppt\\url.txt", 'r')leimus = f_input.readlines()# print(leimus)f_input.close()for leimu in leimus:if leimu.strip():leimu_= split_(leimu)leimu_name = leimu_[0]#提取类目文件夹#         print(file_name)f_lanmu = open("F:\\python program\\ppt\\"+leimu_name+'\\url.txt','r')lanmus = f_lanmu.readlines()for lanmu in lanmus:if lanmu.strip():lanmu_ = split_(lanmu)lanmu_name = judgeName(lanmu_[0])lanmu_link = lanmu_[1]#                 print(lanmu_name)with open("F:\\python program\\ppt\\"+leimu_name+'\\'+lanmu_name+'\\zip_url.txt','r',encoding='utf-8') as f_zip:with open("F:\\python program\\ppt\\"+leimu_name+'\\'+lanmu_name+'\\zip.txt','w',encoding='utf-8') as f_output:zipUrls = f_zip.readlines()for zipUrl in zipUrls:zipUrl = split_(zipUrl)zip_link = zipUrl[1]f_output.write(zip_link+'\n')print("正在处理"+leimu_name+";"+lanmu_name)#                 print('over!')       print("结束")
if __name__ == "__main__":main()

大家在爬取网站链接后,最后备份下,如果后续代码出错,对原文件操作错误不用重新爬取网站链接,从网站上爬链接受很多因素的影响很费时间。备份后,代码中的路径做相应改变即可。运行上面的代码结果为:


至此,我们将网站中所爬主题下的栏目中的ppt模板全部爬了下来,下一步就是批量下载了。

四、批量下载ppt模板

这个步骤有点费事,需要我们手动打开每个栏目下的zip.txt文件,打开此文本文件,同时打开迅雷,复制文本文件,迅雷自动识别,提示下载,我们将其保存到该栏目文件夹下(和打开的zip.txt)文件在同一个文件夹。下载成功后的模样如下图:

我们发现,这样的文件很是让我们抓狂,所以有对其进行批量修改名称的必要。请移步下篇微博:

python3.6爬虫案例:爬取某网站所有PPT(下)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_899874.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3.6爬虫案例:爬取某网站所有PPT(下)。

上篇博客&#xff1a;python3.6爬虫案例&#xff1a;爬取某网站所有PPT&#xff08;上&#xff09;给大家介绍了爬取&#xff08;http://www.1ppt.com/&#xff09;网站中的ppt文件&#xff0c;爬下来的文件如下&#xff1a; 所以&#xff0c;我们就要考虑将其名称修改为其在网…

利用Python爬取妙笔阁小说网站的小说信息并保存为txt和csv格式

本次爬取的是妙笔阁小说网仙侠系列中所有小说的信息&#xff0c;打开网页会看到如下图所示的小说列表。 根据列表&#xff0c;选择爬取小说的书名、作者、最新更新、简介这四项信息。 在爬取之前&#xff0c;为了防止网站禁止爬取&#xff0c;需构造访问的请求头&#xff0…

仿360网站广告实现换肤特效

1、新建一个web项目&#xff0c;index.jsp同级目录下放jquery插件和top_right.png图片 2、index.jsp页面代码 <% page language"java" import"java.util.*" pageEncoding"utf-8"%> <% String path request.getContextPath(); String b…

仿360小说网站的源码设计实现

360首页检索小说效果如下&#xff1a; 个人完成编写的schoolnet校园网主页如下 在小说模块中&#xff0c;包括&#xff1a;小说类别编号&#xff1a;a、校园爱情 b、动漫同人 c、校园魔法 d、轻小说 e、校园励志 f、校园修真 g、名人传记 h、古典小说 …

基于仿360小说网站(校园网)的源码设计实现(升级版)

基于博文仿360小说网站的源码设计实现对小说网站的源码更新升级&#xff08;动漫小说网&#xff09;。 网站PC电脑端效果截图&#xff1a; APP手机端效果截图&#xff1a; 数据库相关表设计&#xff1a; 主要包含小说id,章节id,类型ID,小说名称,章节名称,作者,缩略图,图片地址…

动漫网站源码设计与实现

已完成编写的Sky动漫网主页如下 PC电脑端效果截图&#xff1a; APP手机端效果截图&#xff1a; 数据库相关表设计如下&#xff1a; 主要有&#xff1a;动漫主体信息表、视频播放源表、文章资讯表、主题专辑表、经典语录表、图片图集表、评论表等等 信息采集使用jsoup爬取 各…

第二次作业------仿制网站

码云链接&#xff1a;https://gitee.com/eiumc123/12.git 百度云链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1ej-JvlRfRYe8KzGje-ULOQ 提取码&#xff1a;fnmv &#xff08;文件中有视频&#xff0c;过大无法上传到码云&#xff0c;所以。。。&#xff09; <…

怎么在树莓派上搭建web网站,并发布到外网可访问?

系列文章 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;怎么在树莓派上搭建WordPress博客网站&#xff0c;并发布到外网可访问&#xff1f;如何为树莓派上的WordPress博客网站配置自己的域名&#xff0c;并且外网可访问&#xff1f;如何在局域网外SSH…

怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?

系列文章 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;怎么在树莓派上搭建WordPress博客网站&#xff0c;并发布到外网可访问&#xff1f;如何为树莓派上的WordPress博客网站配置自己的域名&#xff0c;并且外网可访问&#xff1f;如何在局域网外SSH…

如何为树莓派上的WordPress博客网站配置自己的域名,并且外网可访问?

系列文章 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;怎么在树莓派上搭建WordPress博客网站&#xff0c;并发布到外网可访问&#xff1f;如何为树莓派上的WordPress博客网站配置自己的域名&#xff0c;并且外网可访问&#xff1f;如何在局域网外SSH…

如何在树莓派上搭建网站,并发布上线(1)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建网站,并发布上线(2)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建网站,并发布上线(3)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建网站,并发布上线(4)

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建WordPress网站 3-5

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建WordPress网站 4-5

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何在树莓派上搭建WordPress网站 5-5

系列文章 如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;1&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;2&#xff09;如何在树莓派上搭建网站&#xff0c;并发布上线&#xff08;3&#xff09;如何在树莓派上搭建网站&#xff0c;并发布…

如何为搭建的网站配置自己的域名 1-2

系列文章 如何为搭建的网站配置自己的域名 1-2如何为搭建的网站配置自己的域名 2-2cpolar内网穿透如何配置自定义域名访问 在之前的系列文章中&#xff0c;我们向大家介绍了如何在本地树莓派上搭建属于自己的网站&#xff0c;并让这个网站能被公众互联网的用户安全访问。虽然这…

如何为搭建的网站配置自己的域名 2-2

系列文章 如何为搭建的网站配置自己的域名 1-2如何为搭建的网站配置自己的域名 2-2cpolar内网穿透如何配置自定义域名访问 上一篇&#xff1a; 如何为搭建的网站配置自己的域名 1-2 在上一篇文章中&#xff0c;我们通过在服务器上设置新的域名&#xff0c;并将新域名的指向引导…

如何在Ubuntu上搭建WordPress网站,并公网可访问 1-17

系列文章 如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 1-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 2-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 3-17如何在Ubuntu上搭建WordPress网站&#xff0c;并公网可访问 4-17如何在…