python自动化办公之批量图片导入PPT
昨天,大Boss找到一个网页,觉得里面的图片内容特别好,想把它下载下来作为学习资料,整理整理教导下属。但是,手动一张一张的保存图片太慢了,问我可不可以下载下来,最近也在研究Python爬取网页内容,就做了一把尝试。
首先,我们需要找到这个网页中对应的图片链接,这就涉及到了网页的一些相关知识,还好我前几年有自学过一部分内容,虽然不太会写网页,但是大概可以看得懂。
目标网址如下(没有打广告的意思哈):
https://mp.weixin.qq.com/s?__biz=MzI2NjMxMTgwNA==&mid=2247503649&idx=2&sn=f98042fc7a1e80d9b3a3b14ba50047fe&chksm=ea928e32dde507243cba9dc8458c44e28ffadbfaff49b2e1061b527f25dc1e501281acaed5bf&mpshare=1&scene=1&srcid=0108jtZHerwfrHzMEnGLuY5Q&sharer_sharetime=1610071043468&sharer_shareid=218968b0ce2ed380af2f846d290cab70&key=b02de42f9621dfdefa266d7ed7d32f5e25445d8ad3d7341a26941a655f6c9336c6d77fbcbddf3747d946691c97f08f33627ef448fc7edb745e4e2c64de50abfb7f1ed37ca71062c14dff71fa5c33bb250c0f3e7511e00878566dd7dcbfee1901cd7aba381eb519a16921c999a19efb4036454412286aa83735d575e8c4039d95&ascene=1&uin=MTcwNTU2ODMyMA%3D%3D&devicetype=Windows+7+x64&version=6300002f&lang=zh_CN&exportkey=AVXQF%2BRk3QjxiQi9zm0XxZE%3D&pass_ticket=P7%2BimS1i9He7sukQ6KlmLXpKdf9OqkU2xKCVwMV9zCxultcLh6%2BO9gto2piWKHIV&wx_header=0
**怎样查看网页对应的目标图片链接呢?**使用chrome浏览器打开上述网页,然后按F12,就会在右边看到这个网页的源代码,按照我下图的三步走,点击小箭头后,把鼠标移动到目标图片,悬浮即可,这个时候右边会高亮显示对应这个目标部分的网页源代码。就可以看到我用红色框框起来的部分,src后面引号的部分就是这个图片的链接。
(1)现在开始写代码,批量爬取图片。我们可以发现所有的图片都是src="",这个时候要使用正则表达式,匹配到所有的图片链接。以下为这一步的所有的代码:
import urllib.request #导入request模块
url = "https://mp.weixin.qq.com/s?__biz=MzI2NjMxMTgwNA==&mid=2247503649&idx=2&sn=f98042fc7a1e80d9b3a3b14ba50047fe&chksm=ea928e32dde507243cba9dc8458c44e28ffadbfaff49b2e1061b527f25dc1e501281acaed5bf&mpshare=1&scene=1&srcid=0108jtZHerwfrHzMEnGLuY5Q&sharer_sharetime=1610071043468&sharer_shareid=218968b0ce2ed380af2f846d290cab70&key=b02de42f9621dfdefa266d7ed7d32f5e25445d8ad3d7341a26941a655f6c9336c6d77fbcbddf3747d946691c97f08f33627ef448fc7edb745e4e2c64de50abfb7f1ed37ca71062c14dff71fa5c33bb250c0f3e7511e00878566dd7dcbfee1901cd7aba381eb519a16921c999a19efb4036454412286aa83735d575e8c4039d95&ascene=1&uin=MTcwNTU2ODMyMA%3D%3D&devicetype=Windows+7+x64&version=6300002f&lang=zh_CN&exportkey=AVXQF%2BRk3QjxiQi9zm0XxZE%3D&pass_ticket=P7%2BimS1i9He7sukQ6KlmLXpKdf9OqkU2xKCVwMV9zCxultcLh6%2BO9gto2piWKHIV&wx_header=0" #指定url
res = urllib.request.urlopen(url) #调用urlopen()从服务器获取响应界面
html = res.read().decode('utf-8') #对返回的响应数据解码,并赋值给html
imagelist=re.findall('src="(.*?)"',html)
(2)把上面得到的html抓取到本地,存为图片。callbackfunc函数可以显示每张图片下载的百分比,可以看到下载进度情况如何。urllib.request.urlretrieve就是通过我们获取的图片链接urls,把它们下载保存到指定路径local。
import urllib
def callbackfunc(blocknum, blocksize, totalsize):
'''''回调函数
@blocknum: 已经下载的数据块
@blocksize: 数据块的大小
@totalsize: 远程文件的大小
'''
percent = 100.0 * blocknum * blocksize / totalsize
if percent > 100:
percent = 100
print( "%.2f%%"% percent )
i=0#用序号给图片命名
for urls in imagelist:
print('Downloding:'+urls)
i=i+1
if urls!='':
local = '/root/data_warehouse/test/' +str(i)+ '.jpeg'
urllib.request.urlretrieve(urls, local, callbackfunc)
运行结果示例:
(3)现在要把所有图片导入到PPT当中,我们需要下载安装第三方库python-pptx,这里直接使用Jupyternotebook。
!pip install python-pptx
安装成功如下所示:
(4)循环遍历刚才下载到本地的所有图片,创建一个PPT,将所有图片添加到其中,保存PPT
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
for i in range(3,101):#循环遍历所有图片
img_path = '/root/data_warehouse/test/'+str(i)+'.jpeg' #图片名称一定要对
blank_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(blank_slide_layout)
left = top = Inches(0)#设置插入的位置
pic = slide.shapes.add_picture(img_path, left, top)#将图片添加到PPT
prs.save('/root/data_warehouse/test/test.pptx')
以上的实现还有不足的地方,PPT不是16:9的样式,生成PPT后,把样式设置一下,然后调节一下图片大小。这个第三方库用到的都是Inches(英寸),关于图片的大小还没有设置到合适的大小。先把工作任务交差了,后面再慢慢学习完善!
**整理内容不易,走过路过觉得课程内容不错,请帮忙点赞、收藏!Thanks♪(・ω・)ノ****如需转载,请注明出处
参考文献:
https://www.cnblogs.com/zhuwjwh/p/12449992.html
https://zhuanlan.zhihu.com/p/102737358
https://requests.readthedocs.io/en/master/
https://python-pptx.readthedocs.io/en/latest/user/quickstart.html
https://blog.csdn.net/toopoo/article/details/109898688
https://blog.csdn.net/qq_30868235/article/details/80509956
https://my.oschina.net/liurihui/blog/3071934
https://www.cnblogs.com/liuleliu/p/12482021.html
https://www.cnblogs.com/Qqun821460695/p/12067699.html
https://blog.csdn.net/qq_33958297/article/details/89388556