python高清圖片爬取了解一下
高清圖片爬取了解一下
前段時間在知乎看到一篇文章,關於視覺中國如何從騰訊身上扒一層皮的事情。大意就是網際網路巨頭在沒有經過授權的情況下使用了9張來自視覺中國的照片,最後的結果是以賠償視覺中國4w結束。原文連結:
https://zhuanlan.zhihu.com/p/35045810 感興趣的可以看看。
當然這對於我們普通人而言幾乎沒有什麼影響。但我們要知道圖片版權這回事。
今天帶大家爬取的圖片網站是:https://unsplash.com/
這裡的圖片沒有版權,你可以隨便使用。而且這裡面的圖片質量都特別高。我的一些圖片都是從這上面找的
Ajax載入圖片
第一步,請求網頁
我們開啟網站,下拉頁面發現不斷載入圖片,但是整個頁面沒有重新整理,也就是頁面的連結沒有變化。其實這個過程就是Aiax載入的過程。
Ajax請求有特殊的型別,它叫做 xhr ,我們開啟開發者工具或者按 F12鍵,切換到Network。
下方切換到 XHR 這裡面都是經過Ajax載入的。我們往下多點幾個連結發現,下方的三個引數只有 page 在變化,於是我們可以構造這個引數。來提交請求。
#請求網頁返回json資料 def get_page(page,keyword): 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/' } url = 'https://unsplash.com/napi/search/photos' data = { 'page': page, 'per_page': 12, 'query': keyword } response = requests.get(url, headers=headers, params=data) if response.status_code == 200: return response.json()
第二步:解析網頁並得到圖片連結
接著切換到Prereview選項卡,看到返回的是json資料。繼續找發現圖片連結在 download 裡面,我們複製一個連結在瀏覽器裡打開發現分析的沒錯。
接下來,再實現一個解析方法:提取每條資料的links欄位裡的download,將圖片的連結返回。
#得到圖片的URL,這裡的得到的圖片地址僅僅是字串 def get_image(json): for item in json['results']: title = item['id'] images = item['links']['download']# yield{ 'title':title, 'images':images }
最後儲存到本地
if '圖片2' not in os.listdir('.'):
os.mkdir('圖片2') # 建立資料夾
path = os.path.join(os.path.abspath('.'),'圖片2')
os.chdir(path) # 進入資料夾下
#這裡在請求一下圖片的URL得到圖片的內容並進行儲存
def save_images(item):
response = requests.get(item['images'])
with open(item['title'] + '.jpg', 'wb') as f:
f.write(response.content)
#呼叫函式
if __name__ == '__main__':
for page in range(1,2):#想爬幾頁,改這裡
keyword = 'study'#想爬什麼型別的改這裡
json = get_page(page,keyword)
for item in get_image(json):
print('正在下載:',item)
save_images(item)
總結
-
承認自己還有許多不足,程式碼還有許多可以改進的地方
-
本文還可以擴充套件,比如說實現指定關鍵字work,beauty,nature 等下載圖片
-
程式碼不是一下子就寫出來的,要經過不斷除錯,出錯是很正常的,不斷地發現錯誤並解決才能有所進步。學習的過程中善用搜索引擎,多思考。希望與你一同學習。
-
原創不易,覺得不錯點個贊再走唄。
微信掃一掃
關注該公眾號
採集