20行Python代碼批量抓取免費高清圖片!
相信在你的工作中可能會經常用到PPT吧,你在PPT制作過程中有沒有這樣的困惑,就是可以到哪里找到既高清又無版權爭議的圖片素材呢?這里強烈推薦ColorHub,這是一個允許個人和商業用途的免費圖片網站,真的很贊!從她的主頁界面來看,也許你就會愛上她。
那么,如何將網站中的圖片存儲到本地呢(例如比較關心跟數據相關的素材)?如果做到了,就可以在沒有網絡的情況下,隨心所欲的選擇精美圖片制作PPT,隨時隨地的查看自己的圖片庫。而本文所要跟大家分享的就是這個問題的解決方案。
爬蟲思路
我們知道,對于圖片網站的抓取,往往需要經過三層網頁鏈接,為了能夠直觀地理解這三層鏈接,可以查看下圖:
頂層頁:是指通過網站主頁的搜索欄,搜索出感興趣的圖片方向,便進入到的圖片列表頁,它的樣子是這樣的:
次層頁:是指點擊圖片列表頁中的某張圖片,轉而對應到的圖片詳情頁,它的樣子是這樣的:
目標頁:最后就是為了抓取圖片詳情頁中的那張高清圖片,而這張圖片在網頁源代碼中就是一個圖片鏈接,它的樣子是這樣的:
所以,爬蟲抓取圖片的最終目的就是找到高清圖片所對應的鏈接。接下來將通過代碼的介紹,呈現三層鏈接的尋找和請求過程。
- 1# 導入第三方包
- 2import requests
- 3from bs4 import BeautifulSoup
- 4import random
- 5import time
- 6from fake_useragent import UserAgent
- 7
- 8# 通過循環實現多頁圖片的抓取
- 9for page in range(1,11):
- 10 # 生成頂層圖片列表頁的鏈接
- 11 fst_url = r https://colorhub.me/search?tag=data&page={} .format(page)
- 12 # 生成UA,用于爬蟲請求頭的設置
- 13 UA = UserAgent()
- 14 # 向頂層鏈接發送請求
- 15 fst_response = requests.get(fst_url, headers = { User-Agent :UA.random})
- 16 # 解析頂層鏈接的源代碼
- 17 fst_soup = BeautifulSoup(fst_response.text)
- 18 # 根據HTML的標記規則,返回次層圖片詳情頁的鏈接和圖片名稱
- 19 sec_urls = [i.find( a )[ href ] for i in fst_soup.findAll(name = div , attrs = { class : card })]
- 20 pic_names = [i.find( a )[ title ] for i in fst_soup.findAll(name = div , attrs = { class : card })]
- 21 # 對每一個次層鏈接做循環
- 22 for sec_url,pic_name in zip(sec_urls,pic_names):
- 23 # 生成UA,用于爬蟲請求頭的設置
- 24 UA = UserAgent()
- 25 ua = UA.random
- 26 # 向次層鏈接發送請求
- 27 sec_response = requests.get(sec_url, headers = { User-Agent :ua})
- 28 # 解析次層鏈接的源代碼
- 29 sec_soup = BeautifulSoup(sec_response.text)
- 30 # 根據HTML的標記規則,返回圖片鏈接
- 31 pic_url = https: + sec_soup.find( img ,{ class : card-img-top })[ src ]
- 32 # 對圖片鏈接發送請求
- 33 pic_response = requests.get(pic_url, headers = { User-Agent :ua})
- 34 # 將二進制的圖片數據寫入到本地(即存儲圖片到本地)
- 35 with open(pic_name+ .jpg , mode = wb ) as fn:
- 36 fn.write(pic_response.content)
- 37 # 生成隨機秒數,用于也沒的停留
- 38 seconds = random.uniform(1,3)
- 39 time.sleep(seconds)
不難發現,代碼的核心部分就16行,還是很簡單的吧。還不趕快去測試一下這里的代碼哦(如果你對某個方面感興趣,如商務、建筑、植物等,通過搜索,找到頂層頁鏈接,替換代碼中的fst_url值即可)。
在運行完如上代碼后,將會抓取ColorHub網站中的10頁圖片,一共包含325張高清圖片,展示如下: