1. 程式人生 > >Python爬蟲爬取網上圖片原始碼,可用來製作深度學習資料集

Python爬蟲爬取網上圖片原始碼,可用來製作深度學習資料集

這次利用python設計一個爬取百度圖片上的圖片的原始碼,其中利用的是python的urllib,如果沒有裝的,可以使用Anconda在環境裡進行安裝或者
pip install urllib
這兩種方式都可以安裝,長話短說,上圖吧,點選執行後,輸入你要下載的圖片型別:
在這裡插入圖片描述
比如,熊貓?美女?還是熊貓先吧
在這裡插入圖片描述
再來美女試試!

在這裡插入圖片描述
咋都是這麼性感!

在這裡插入圖片描述
那麼是不是百度圖片頁面搜尋的那樣呢?

看一下,對比一下,是的!

在這裡插入圖片描述

提示:有時會出現頁面錯誤的資訊,如下
在這裡插入圖片描述
那就說明前60張爬不下來,想想也就不鬥智鬥勇了,百度裡的圖片還是有很多的,能爬多少是多少得了!

這個可不是簡單的隨意爬取圖片的吶,這個等你在深度學習後面做網路訓練製作資料集時,可以從網上爬取一些你需要的訓練圖片資源的。不要用錯地方了。。

附上原始碼:

(對於其中的url一欄,如果有興趣,可以關注我後私信給我,然後我後臺發給你使用,這也是和有興趣的同學一個交流的機會,嘿嘿)

import urllib.request
import urllib.parse
import re
import os
# 新增header,其中Referer是必須的,否則會返回403錯誤,User-Agent是必須的,這樣才可以偽裝成瀏覽器進行訪問
header = \
    {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        "referer": "https://image.baidu.com"
    }
#這裡url是一個非常主要的url,可以直接訪問baidu網址的,這個不容易外傳,所以就不寫全了
url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp"

keyword = input("請輸入搜尋關鍵字:")

# 轉碼
keyword = urllib.parse.quote(keyword, 'utf-8')
n = 0
j = 0
while (n < 1000):
    error = 0
    n += 30
    # url
    url1 = url.format(word=keyword, pageNum=str(n))
    # 獲取請求
    rep = urllib.request.Request(url1, headers=header)
    # 開啟網頁
    rep = urllib.request.urlopen(rep)
    # 獲取網頁內容
    try:
        html = rep.read().decode('utf-8')
        # print(html)
    except:
        print("出錯了!")
        error = 1
        print("出錯頁數:" + str(n))
    if error == 1:
        continue
    # 正則匹配
    p = re.compile("thumbURL.*?\.jpg")
    # 獲取正則匹配到的結果,返回list
    s = p.findall(html)
    if os.path.isdir("D://pic") != True:
        os.makedirs("D://pic")
    with open("testpic.txt", "a") as f:
        # 獲取圖片
        for i in s:
            print(i)
            i = i.replace('thumbURL":"', '')
            print(i)
            f.write(i)
            f.write("\n")
            # 儲存圖片
            urllib.request.urlretrieve(i, "D://pic/pic{num}.jpg".format(num=j))
            j += 1
        f.close()
print("總共爬取圖片數為:" + str(j))