python自动化办公之爬取HTML图片写入PPT实战

此文转载自:https://blog.csdn.net/zxxxlh123/article/details/112387503

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

   

更多内容详见微信公众号:Python测试和开发

Python测试和开发

原文地址:https://www.cnblogs.com/phyger/p/14262146.html