Python爬蟲(chóng)實(shí)現(xiàn)百度圖片自動(dòng)下載
制作爬蟲(chóng)的步驟
制作一個(gè)爬蟲(chóng)一般分以下幾個(gè)步驟:
分析需求分析網(wǎng)頁(yè)源代碼,配合開(kāi)發(fā)者工具編寫(xiě)正則表達(dá)式或者XPath表達(dá)式正式編寫(xiě) python 爬蟲(chóng)代碼 效果預(yù)覽
運(yùn)行效果如下:
存放圖片的文件夾:
需求分析
我們的爬蟲(chóng)至少要實(shí)現(xiàn)兩個(gè)功能:一是搜索圖片,二是自動(dòng)下載。
搜索圖片:最容易想到的是爬百度圖片的結(jié)果,我們就上百度圖片看看:
隨便搜索幾個(gè)關(guān)鍵字,可以看到已經(jīng)搜索出來(lái)很多張圖片:
分析網(wǎng)頁(yè)
我們點(diǎn)擊右鍵,查看源代碼:
打開(kāi)源代碼之后,發(fā)現(xiàn)一堆源代碼比較難找出我們想要的資源。
這個(gè)時(shí)候,就要用開(kāi)發(fā)者工具!我們回到上一頁(yè)面,調(diào)出開(kāi)發(fā)者工具,我們需要用的是左上角那個(gè)東西:(鼠標(biāo)跟隨)。
然后選擇你想看源代碼的地方,就可以發(fā)現(xiàn),下面的代碼區(qū)自動(dòng)定位到了相應(yīng)的位置。如下圖:
我們復(fù)制這個(gè)地址,然后到剛才的一堆源代碼里搜索一下,發(fā)現(xiàn)了它的位置,但是這里我們又疑惑了,這個(gè)圖片有這么多地址,到底用哪個(gè)呢?我們可以看到有thumbURL,middleURL,hoverURL,objURL
通過(guò)分析可以知道,前面兩個(gè)是縮小的版本,hoverURL 是鼠標(biāo)移動(dòng)過(guò)后顯示的版本,objURL 應(yīng)該是我們需要的,可以分別打開(kāi)這幾個(gè)網(wǎng)址看看,發(fā)現(xiàn) objURL 的那個(gè)最大最清晰。
找到了圖片地址,接下來(lái)我們分析源代碼。看看是不是所有的 objURL 都是圖片。
發(fā)現(xiàn)都是以.jpg格式結(jié)尾的圖片。
編寫(xiě)正則表達(dá)式
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
編寫(xiě)爬蟲(chóng)代碼
這里我們用了2個(gè)包,一個(gè)是正則,一個(gè)是 requests 包
#-*- coding:utf-8 -*- import re import requests
復(fù)制百度圖片搜索的鏈接,傳入 requests ,然后把正則表達(dá)式寫(xiě)好
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)
因?yàn)橛泻芏鄰垐D片,所以要循環(huán),我們打印出結(jié)果來(lái)看看,然后用 requests 獲取網(wǎng)址,由于有些圖片可能存在網(wǎng)址打不開(kāi)的情況,所以加了10秒超時(shí)控制。
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('【錯(cuò)誤】當(dāng)前圖片無(wú)法下載') continue
接著就是把圖片保存下來(lái),我們事先建立好一個(gè) images 目錄,把圖片都放進(jìn)去,命名的時(shí)候,以數(shù)字命名。
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('找到關(guān)鍵詞:' + keyword + '的圖片,現(xiàn)在開(kāi)始下載圖片...') for each in pic_url: print('正在下載第' + str(i) + '張圖片,圖片地址:' + str(each)) try: pic = requests.get(each, timeout=10) except requests.exceptions.ConnectionError: print('【錯(cuò)誤】當(dāng)前圖片無(wú)法下載') 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)
我們看到有的圖片沒(méi)顯示出來(lái),打開(kāi)網(wǎng)址看,發(fā)現(xiàn)確實(shí)沒(méi)了。
因?yàn)榘俣扔行﹫D片它緩存到百度的服務(wù)器上,所以我們?cè)诎俣壬线€能看見(jiàn)它,但它的實(shí)際鏈接已經(jīng)失效了。
總結(jié)
enjoy 我們的第一個(gè)圖片下載爬蟲(chóng)吧!當(dāng)然它不僅能下載百度的圖片,依葫蘆畫(huà)瓢,你現(xiàn)在應(yīng)該能做很多事情了,比如爬取頭像,爬淘寶展示圖等等。
完整代碼已經(jīng)放到Githut上 https://github.com/nnngu/BaiduImageDownload
- python 爬取百度文庫(kù)并下載(免費(fèi)文章限定)
- Python實(shí)現(xiàn)的爬取百度文庫(kù)功能示例
- 用python下載百度文庫(kù)的代碼
- python 爬蟲(chóng)如何實(shí)現(xiàn)百度翻譯
- 詳解用Python爬蟲(chóng)獲取百度企業(yè)信用中企業(yè)基本信息
- Python爬蟲(chóng)爬取百度搜索內(nèi)容代碼實(shí)例
- Python爬蟲(chóng)實(shí)現(xiàn)百度翻譯功能過(guò)程詳解
- python 爬蟲(chóng)百度地圖的信息界面的實(shí)現(xiàn)方法
- python爬蟲(chóng)之爬取百度音樂(lè)的實(shí)現(xiàn)方法
- Python爬蟲(chóng)實(shí)現(xiàn)爬取百度百科詞條功能實(shí)例
- python爬蟲(chóng)獲取百度首頁(yè)內(nèi)容教學(xué)
- Python爬蟲(chóng)實(shí)例_利用百度地圖API批量獲取城市所有的POI點(diǎn)
- python實(shí)現(xiàn)百度文庫(kù)自動(dòng)化爬取
相關(guān)文章
使用 python 實(shí)現(xiàn)單人AI 掃雷游戲
這篇文章主要介紹了使用 python 實(shí)現(xiàn)單人AI 掃雷游戲,今天我們用 Python 完成這個(gè)小程序,并且用AI來(lái)學(xué)習(xí)并實(shí)現(xiàn)它,需要的朋友可以參考下2021-08-08pyspark自定義UDAF函數(shù)調(diào)用報(bào)錯(cuò)問(wèn)題解決
這篇文章主要為大家介紹了pyspark自定義UDAF函數(shù)調(diào)用報(bào)錯(cuò)問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06一文帶你了解Python列表生成式應(yīng)用的八重境界
在Python中有非常多且好用的技巧,其中使用最多的是列表生成式,往往可以將復(fù)雜的邏輯用簡(jiǎn)單的語(yǔ)言來(lái)實(shí)現(xiàn),本文重點(diǎn)介紹列表生成式應(yīng)用的八重境界2022-09-09淺談python中統(tǒng)計(jì)計(jì)數(shù)的幾種方法和Counter詳解
今天小編就為大家分享一篇淺談python中統(tǒng)計(jì)計(jì)數(shù)的幾種方法和Counter詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Python常見(jiàn)MongoDB數(shù)據(jù)庫(kù)操作實(shí)例總結(jié)
這篇文章主要介紹了Python常見(jiàn)MongoDB數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式詳細(xì)總結(jié)了Python針對(duì)MongoDB數(shù)據(jù)庫(kù)相關(guān)pymongo庫(kù)安裝以及MongoDB數(shù)據(jù)庫(kù)的增刪改查等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-07-07如何使用VSCode愉快的寫(xiě)Python于調(diào)試配置步驟
從我的使用經(jīng)驗(yàn)出發(fā),可以說(shuō)VSCode用來(lái)寫(xiě)Python真的是再合適不過(guò)了,你將體驗(yàn)到絲滑的編程體驗(yàn)和無(wú)限擴(kuò)展的可能。而且,如果你的項(xiàng)目是包含多種語(yǔ)言的,比如Web開(kāi)發(fā),你不必再開(kāi)多個(gè)編輯器和其他工具,因?yàn)檫@一切都可以在VSCode里完成了2018-04-04