學了前面幾篇圖形檔操作程式,卻沒有練習的對象?沒關係,在這一篇中教大家去到處抓一抓。
感謝【大數學堂】網頁David老師的熱心分享,看完之後真的是獲益良多,所以在這裡也要回饋一下,把在那裡學到的再進一步發揮,讓砍圖的程式更好操作。這裡所說的砍圖,我也不知道我們這一代的用語和現在的年輕人用語是否一樣,但是這裡的意思當然不是把網頁上的圖形檔都刪除的意思,相反的,是把整個網頁中所有的圖形檔一口氣砍回家,放在自家的硬碟目錄中。程式執行的方法很簡單,找到一個目標網頁(有很多圖檔在同一個網頁上顯示的)targetURL,然後執行下列的程式:
python fetchpics.py targetURL
如果這個網頁是符合我們分析的對象的格式的話,你就會看到一大堆圖形檔的名稱在網頁上一個一個顯示出來,所有被鎖定的圖形檔,都會被存放在pics的資料夾中。要執行這個程式,你的Python要安裝有requests和BeautifulSoup4,安裝方法如下:
$ pip install requests $ pip install BeautifulSoup4
程式如下:
# Author: skynet # E-mail: skynet.tw@gmail.com # Date: 2015/9 # Programming Lanuage: Python 2.7 # # Usage: python fetchpics.py targetURL # import requests import shutil from bs4 import BeautifulSoup import sys, os args = sys.argv if len(args) < 2: print "Please enter a URL to fetch!" exit(0) output_path = "pics/" if not os.path.exists(output_path): os.mkdir(output_path) turl = args[1] res = requests.get(turl) soup = BeautifulSoup(res.text, "html.parser") count = 0 for img in soup.select('img'): fname = img['src'].split('/')[-1] fname_length = len(fname) if '.jpg' in fname: if '?' in fname: real_fname = fname.split('?')[0] else: real_fname = fname real_fname = output_path + real_fname print real_fname res2 = requests.get(img['src'], stream=True) res_length = res2.headers['content-length'] if int(res_length) < 50000: print "--->Too small, discard it!" continue fp = open(real_fname, 'wb') shutil.copyfileobj(res2.raw,fp) fp.close() del res2 count = count + 1 print "Total", count , " pictures done."
這個程式會自動把低於50KB大小的檔案略過,如果你覺得有需要,可以自行修改程式中的內容。程式的執行結果如下所示:
(462)
近期留言