1. 程式人生 > 實用技巧 >python自動化辦公之爬取HTML圖片寫入PPT實戰

python自動化辦公之爬取HTML圖片寫入PPT實戰

此文轉載自:https://blog.csdn.net/zxxxlh123/article/details/112387503#commentBox

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