作用:通过python的requests,re,multiprocessing等库实现批量下载PPT图片

操作步骤:

一、去百度查找对应的PPT网址并测试查看图片存储网络地址。

1、在百度查找到的PPT图片网址是:http://www.lfppt.com/pptbj___1.html

2、按F12——F5——↖——点击图片,查找到所有的图片都在img标签里,图片路径为src属性的属性值,如下图所示:

二、开始在pycharm里编写代码。

在python3.7环境下的pycharm里编写源代码,代码如下:

#1、导入相应的库 import re,random,requests,os,time from bs4 import BeautifulSoup from multiprocessing import Pool #2、创建相应的get请求函数下载图片 def downpic(page): url="http://www.lfppt.com/pptbj___"+str(page)+".html" agent1 = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"} # 设定请求头的值agent1 agent2 = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"} # 设定请求头的值agent2 agent3 = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36"} # 设定请求头的值agent3 list1 = [agent1, agent2, agent3] # 设置3个请求头组成的列表,并赋值给列表list1 agent = random.choice(list1) # 请求头的值agent从列表list1里随机选择一个 try: response = requests.get(url, headers=agent) # 伪装浏览器对网站进行get请求,并将请求结果赋值给response response.encoding = response.apparent_encoding # 根据内容解析出网页的编码格式并赋值给response.encoding html = response.text # 将网页的源代码赋值给html pattern1=re.compile('') #设置正则表格式的匹配规则是查找img标签里的src属性的属性值 result1=re.findall(pattern1,html) #在html源代码里查找全部符合匹配规则pattern1的源代码,并赋值给result1,findall是查找所有的 xx=1 #设置自增遍历xx的初始值为1 path="F://PPT图片/" #定义保存到本机F盘PPT图片的路径,并赋值给path,用来保存下载的图片 if not os.path.exists(path): #假如这个路径不存在时 os.mkdir(path) #新建这个路径 for img in result1: #在查找出来的result1里遍历这个图片标签 url2 = img #将图片标签赋值给url2 response2 = requests.get(url2, headers=agent) #伪装浏览器对网站进行get请求,并将请求结果赋值给response2 response2.encoding = response2.apparent_encoding # 根据内容解析出网页的编码格式并赋值给response.encoding content2 = response2.content #将网页相应的源代码二进制数据赋值给content2 abspath = path + str(page) + str(xx) + url2[-4:] #定义保存文件的绝对路径为path路径+页码+自增变量+图片的最后4个值 xx=xx+1 #每遍历一次,xx自增1 with open(abspath, "wb") as f: #打开绝对路径的文件abspath,并进行二进制写入操作,并设置为f f.write(content2) #在f文件里写入网页相应的源代码二进制数据 f.close() #关闭文件f print("{}下载完成,下载到本机的路径是:{}".format(url2, abspath)) except: #当接收到错误反馈时 print("爬取失败") #打印爬取结束 finally: #最终 print("第{}页图片下载完成".format(page)) #打印第多少页下载完成 if __name__ == '__main__': start=time.time() #设置开始时间,并将开始时间赋值给start pp=Pool(4) #创建进程池,进程池里的进程个数为4,4一般是根据cpu核心数确定的,并赋值给pp for page in range(1,5): #遍历1到5页的数据,不含5,并赋值给page pp.apply_async(downpic,args=(page,)) #创建非阻塞式进程,进程的任务是downpic下载图片,参数为page pp.close() #关闭进程 pp.join() #等待进程结束才执行后续动作 end=time.time() #定义结束时间并赋值给end print("总耗时{}秒".format(end-start)) #打印总耗时多少秒,总耗时是结束时间—开始时间

运行结果如下图所示:

上图的左边是代码,右边是代码运行结果

保存到本机的PPT图片示例如下: