來源:Python知識圈 鏈接: https://mp.weixin.qq.com/s/hRnRH7EL5enstoQ-iqr2uQ

生活或者工作中,不管是寫文章、公司 UI 交互圖還是廣告圖等等都需要用到圖片,圖片的優(yōu)點和重要性自不用說。 圖片我們可不能隨便從網(wǎng)上搜索來用,我們得注意圖片的版權(quán)。我一般是在無版權(quán)的網(wǎng)站上找圖片,比如我常用的 pixabay 網(wǎng)站,打開網(wǎng)站,搜索我們需要的主題圖片,結(jié)果,加載大半天,還是下面這樣的。。。 這大大的影響我們的效率和心情啊,因為這網(wǎng)站的服務(wù)器是國外的,所有才會這么慢。 作為一個追求工作和生活高效率的 Pythoner,這個實在忍不了。
于是我用決定用 Python 寫一個簡單的爬蟲,把不同主題的圖片分別保存在本地,下次需要用圖的時候直接在本地瀏覽選擇就行了。 瀏覽器中 F12 調(diào)試,我們看看單個圖片的 url 鏈接??,大部分的圖片 url 都在 「data-lazy-srcset」 屬性里。 我們用正則表達(dá)式提取出一個頁面所有的圖片 url,比如我提取第 2 頁所有的圖片 url,并把這些 url 放在列表里,方便接下來調(diào)用后下載圖片。 def get_urls(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'} html = requests.get(url, headers=headers).text urls = re.compile(r'data-lazy-srcset='(.*?)'') res = re.findall(urls, html) img_urls = [] for u in res: img_url = str(u).split(',')[0].strip(' 1x') img_urls.append(img_url) return img_urls
創(chuàng)建目錄 我們給不同的主題圖片主動新建文件夾保存,包括「素材圖片」文件夾前面的路徑大家換成自己路徑,我用的 Mac 電腦路徑和 windows 系統(tǒng)路徑不同,大家根據(jù)情況替換。后面的 direcory 參數(shù)是我們輸入的查詢圖片的關(guān)鍵字,根據(jù)我們輸入的關(guān)鍵字來創(chuàng)建主題文件夾儲存下載的圖片。 # 創(chuàng)建不同的文件夾儲存圖片 def mkdir(directory): isExists = os.path.exists(r'/Users/brucepk/Pictures/素材圖片/{}'.format(directory)) if not isExists: print('創(chuàng)建 %s 目錄' % directory) os.makedirs(r'/Users/brucepk/Pictures/素材圖片/{}'.format(directory)) # 創(chuàng)建目錄 os.chdir(r'/Users/brucepk/Pictures/素材圖片/{}'.format(directory)) # 切換到創(chuàng)建的文件夾 return True else: print('目錄 %s 已存在,即將保存!' % directory) return False
下載圖片
我們把提取出來的圖片下載下來,open 后面的 wb+ 表示以二進(jìn)制讀寫模式打開。 def download(filename, url): with open(filename, 'wb+') as f: try: f.write(requests.get(url).content) print('成功下載圖片:', filename) except: print('下載失敗:', filename)
最后,pk 哥用 input 方法讓大家自行輸入查詢的英文關(guān)鍵字,「pagi」后的參數(shù)是頁面,我用 for 循環(huán)讓它爬取前 5 頁。 if __name__ == '__main__': directory = input('輸出你要下載的圖片的英文關(guān)鍵字:') for num in range(1, 6): search_url = 'https:///images/search/{}/?pagi={}'.format(directory, num) # 拼接每頁的鏈接 mkdir(directory) for url in get_urls(search_url): filename = r'/Users/brucepk/Pictures/素材圖片/{}/'.format(directory) + url.split('/')[-1] # 圖片的路徑 download(filename, url) print('第%s頁已爬取' % num) time.sleep(int(format(random.randint(3, 10)))) # 隨機(jī)等待時間
運行代碼,pk 哥輸入英文關(guān)鍵字后回車,效果如下。 把自己常用的主題圖都下載在本地,以后找圖再也不用等了,爽歪歪。 
本文全部源碼: https://github.com/Brucepk/download-no-copyright-image/blob/master/pixabay.py題圖:Pixabay
(完) 看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人 關(guān)注「Python那些事」,做全棧開發(fā)工程師
|