高清圖檔爬取了解一下

前段時間在知乎看到一篇文章,關于視覺中國如何從騰訊身上扒一層皮的事情。大意就是網際網路巨頭在沒有經過授權的情況下使用了9張來自視覺中國的照片,最後的結果是以賠償視覺中國4w結束。原文連結:
https://zhuanlan.zhihu.com/p/35045810 感興趣的可以看看。
當然這對于我們普通人而言幾乎沒有什麼影響。但我們要知道圖檔版權這回事。
今天帶大家爬取的圖檔網站是:https://unsplash.com/
這裡的圖檔沒有版權,你可以随便使用。而且這裡面的圖檔品質都特别高。我的一些圖檔都是從這上面找的
Ajax加載圖檔 第一步,請求網頁我們打開網站,下拉頁面發現不斷加載圖檔,但是整個頁面沒有重新整理,也就是頁面的連結沒有變化。其實這個過程就是Aiax加載的過程。
Ajax請求有特殊的類型,它叫做 xhr ,我們打開開發者工具或者按 F12鍵,切換到Network。
下方切換到 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 裡面,我們複制一個連結在浏覽器裡打開發現分析的沒錯。
接下來,再實作一個解析方法:提取每條資料的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