您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Python爬蟲如何實現百度圖片自動下載的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
制作一個爬蟲一般分以下幾個步驟:
分析需求分析網頁源代碼,配合開發者工具編寫正則表達式或者XPath表達式正式編寫 python 爬蟲代碼 效果預覽
運行效果如下:
存放圖片的文件夾:
我們的爬蟲至少要實現兩個功能:一是搜索圖片,二是自動下載。
搜索圖片:最容易想到的是爬百度圖片的結果,我們就上百度圖片看看:
隨便搜索幾個關鍵字,可以看到已經搜索出來很多張圖片:
我們點擊右鍵,查看源代碼:
打開源代碼之后,發現一堆源代碼比較難找出我們想要的資源。
這個時候,就要用開發者工具!我們回到上一頁面,調出開發者工具,我們需要用的是左上角那個東西:(鼠標跟隨)。
然后選擇你想看源代碼的地方,就可以發現,下面的代碼區自動定位到了相應的位置。如下圖:
我們復制這個地址,然后到剛才的一堆源代碼里搜索一下,發現了它的位置,但是這里我們又疑惑了,這個圖片有這么多地址,到底用哪個呢?我們可以看到有thumbURL,middleURL,hoverURL,objURL
通過分析可以知道,前面兩個是縮小的版本,hoverURL 是鼠標移動過后顯示的版本,objURL 應該是我們需要的,可以分別打開這幾個網址看看,發現 objURL 的那個最大最清晰。
找到了圖片地址,接下來我們分析源代碼。看看是不是所有的 objURL 都是圖片。
發現都是以.jpg格式結尾的圖片。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
這里我們用了2個包,一個是正則,一個是 requests 包
#-*- coding:utf-8 -*- import re import requests
復制百度圖片搜索的鏈接,傳入 requests ,然后把正則表達式寫好
url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5%E5%A4%B4%E5%83%8F&ct=201326592&ic=0&lm=-1&width=&height=&v=index' html = requests.get(url).text pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
因為有很多張圖片,所以要循環,我們打印出結果來看看,然后用 requests 獲取網址,由于有些圖片可能存在網址打不開的情況,所以加了10秒超時控制。
pic_url = re.findall('"objURL":"(.*?)",',html,re.S) i = 1 for each in pic_url: print each try: pic= requests.get(each, timeout=10) except requests.exceptions.ConnectionError: print('【錯誤】當前圖片無法下載') continue
接著就是把圖片保存下來,我們事先建立好一個 images 目錄,把圖片都放進去,命名的時候,以數字命名。
dir = '../images/' + keyword + '_' + str(i) + '.jpg' fp = open(dir, 'wb') fp.write(pic.content) fp.close() i += 1
完整的代碼
# -*- coding:utf-8 -*- import re import requests def dowmloadPic(html, keyword): pic_url = re.findall('"objURL":"(.*?)",', html, re.S) i = 1 print('找到關鍵詞:' + keyword + '的圖片,現在開始下載圖片...') for each in pic_url: print('正在下載第' + str(i) + '張圖片,圖片地址:' + str(each)) try: pic = requests.get(each, timeout=10) except requests.exceptions.ConnectionError: print('【錯誤】當前圖片無法下載') continue dir = '../images/' + keyword + '_' + str(i) + '.jpg' fp = open(dir, 'wb') fp.write(pic.content) fp.close() i += 1 if __name__ == '__main__': word = input("Input key word: ") url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip' result = requests.get(url) dowmloadPic(result.text, word)
我們看到有的圖片沒顯示出來,打開網址看,發現確實沒了。
因為百度有些圖片它緩存到百度的服務器上,所以我們在百度上還能看見它,但它的實際鏈接已經失效了。
感謝各位的閱讀!關于“Python爬蟲如何實現百度圖片自動下載”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。