爬蟲怎麼根據一個關鍵詞爬取上千張網路圖片

小匠人發表於2018-01-25

本文的亮點是可以儲存通過關鍵詞搜尋到的所有圖片,而不只是第一頁的圖片。

 由於公司做訓練需要蒐集一些圖片,所以就開始打算用爬蟲自動下載。剛開始是使用

【圖文詳解】python爬蟲實戰——5分鐘做個圖片自動下載器 - 簡書


中的程式進行下載。但是感覺不是太好用,每一個關鍵詞最多隻能儲存60張圖片。而我們需要蒐集幾萬張圖片,根本不能滿足要求。

程式碼如下:

#-*- coding:utf-8 -*-
import re
import requests



def dowmloadPic(html,keyword,startNum):

    pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
    num = len(pic_url)
    i = startNum
    print('找到關鍵詞:'+keyword+'的圖片%d 張,現在開始下載圖片...' % num)
    for each in pic_url:
        print('正在下載第'+str(i+1)+'張圖片,圖片地址:'+str(each))
        try:
            pic= requests.get(each, timeout=10)
            string = 'pictures1/'+keyword+'_'+str(i) + '.jpg'
            #resolve the problem of encode, make sure that chinese name could be store
            fp = open(string,'wb')
            fp.write(pic.content)
            fp.close()
        # except requests.exceptions.ConnectionError:
        except:
            print ('【錯誤】當前圖片無法下載')
            continue

        i += 1

    return i


if __name__ == '__main__':

    lastNum = 0
    words = ['胖人墨鏡','墨鏡手錶美女','帶墨鏡帥哥','墨鏡中年帥哥','墨鏡帥哥畫','墨鏡小帥哥','海邊墨鏡帥哥','墨鏡帥哥桌布','90後墨鏡帥哥']
 #words為一個列表,可以自動儲存多個關鍵字的圖片
  for word in words:
        # word = input("Input key word: ")
        if word.strip() == "exit":
            break
  #關鍵就在這裡,我發現將百度圖片選擇傳統版本(預設是瀑布流版本,只有滑動滑動條,才會看到更多圖片。傳統版本,就是分頁顯示,底部可以選擇頁數)後,圖片網址跟頁數有一個關係,因此利用該關係就可以自動獲取好多頁的網址,進行儲存圖片。
   pageId = 0
  #這裡我儲存到第50頁
   for i in range(50):
            url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + "&pn="+str(pageId)+"&gsm=?&ct=&ic=0&lm=-1&width=0&height=0"
            pageId += 20
            #url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E5%A2%A8%E9%95%9C%E7%94%B7%E4%BA%BA&ct=201326592&ic=0&lm=-1&width=&height=&v=index'
            result = requests.get(url)
            lastNum = dowmloadPic(result.text, 'sunglasses', lastNum)





相關文章