天天看點

python之高清圖檔爬取了解一下

高清圖檔爬取了解一下

python之高清圖檔爬取了解一下

前段時間在知乎看到一篇文章,關于視覺中國如何從騰訊身上扒一層皮的事情。大意就是網際網路巨頭在沒有經過授權的情況下使用了9張來自視覺中國的照片,最後的結果是以賠償視覺中國4w結束。原文連結:

https://zhuanlan.zhihu.com/p/35045810 感興趣的可以看看。

當然這對于我們普通人而言幾乎沒有什麼影響。但我們要知道圖檔版權這回事。

今天帶大家爬取的圖檔網站是:https://unsplash.com/ 

這裡的圖檔沒有版權,你可以随便使用。而且這裡面的圖檔品質都特别高。我的一些圖檔都是從這上面找的

Ajax加載圖檔 第一步,請求網頁

我們打開網站,下拉頁面發現不斷加載圖檔,但是整個頁面沒有重新整理,也就是頁面的連結沒有變化。其實這個過程就是Aiax加載的過程。

Ajax請求有特殊的類型,它叫做 xhr ,我們打開開發者工具或者按 F12鍵,切換到Network。

python之高清圖檔爬取了解一下

 下方切換到 XHR 這裡面都是經過Ajax加載的。我們往下多點幾個連結發現,下方的三個參數隻有 page 在變化,于是我們可以構造這個參數。來送出請求。

```

def get_page(page,headers):

url = 'https://unsplash.com/napi/photos'

   data = {

       'page': page,

       'per_page': 12,

       'order_by': 'latest'

   }

   response = requests.get(url, headers=headers, params=data)

   if response.status_code == 200:

       return response.json()

第二步:解析網頁并得到圖檔連結

接着切換到Prereview頁籤,看到傳回的是json資料。繼續找發現圖檔連結在 download 裡面,我們複制一個連結在浏覽器裡打開發現分析的沒錯。

python之高清圖檔爬取了解一下

接下來,再實作一個解析方法:提取每條資料的links字段裡的download,将圖檔的連結傳回。

def get_image(json,headers):

for item in json:

images = item['links']['download']#這句借鑒大佬代碼,真的是厲害了

print('正在下載下傳:',images)

urllib3.disable_warnings()

response = requests.get(images,headers=headers,verify=False)

return response,images

最後儲存到本地

def save_images(response,images):

if '圖檔' not in os.listdir('.'):

os.mkdir('圖檔')# 建立檔案夾

os.chdir('圖檔')# 進入檔案夾下

filename = images.split('/')[-2] + '.jpg'

with open(filename, 'wb') as f:

f.write(response.content)

os.chdir('..')# 傳回上級目錄

if __name__ == '__main__':

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'

 '(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',

 'referer': 'https://unsplash.com/'

}

for i in range(1,10):

json = get_page(i,headers)

response,images = get_image(json,headers)

save_images(response,images)

總結

承認自己還有許多不足,代碼還有許多可以改進的地方

本文還可以擴充,比如說實作指定關鍵字work,beauty,nature 等下載下傳圖檔

代碼不是一下子就寫出來的,要經過不斷調試,出錯是很正常的,不斷地發現錯誤并解決才能有所進步。學習的過程中善用搜尋引擎,多思考。希望與你一同學習。

原創不易,覺得不錯點個贊再走呗。

公衆号:sixkery