1. 程式人生 > >python高清圖片爬取了解一下

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 等下載圖片

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

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

微信掃一掃
關注該公眾號

採集