17-用python爬取下載女神照片

2020-10-15 14:00:47

今天咱們要爬取花瓣網 https://huaban.com/
設計師尋找靈感的天堂!有海量的圖片素材可以下載,是一個優質圖片靈感庫

這次我們用 requests 登入花瓣網,爬取頁面,再用正則與json提取有用資訊,最後把獲取的圖片資訊 儲存到本地

一 、用到技術

  • python 基礎
  • requests 登入頁面獲取session使用者對談,下載圖片
  • 正規表示式 提取頁面的有用資訊
  • json解析頁面中的圖片

二、 目標頁面

https://huaban.com/search/?q=女神&category=photography
女神

三、結果

結果

四、安裝 必要的庫

  • win+R 開啟執行
  • 輸出cmd 進入控制檯
  • 分別安裝requests
pip install  requests 

五、分析頁面

  1. 頁面規律
    我們單擊分頁按鈕,拿到頁面最後一個引數的規律
    第一頁:https://huaban.com/search/?q=女神&category=photography&page=1
    第二頁:https://huaban.com/search/?q=女神&category=photography&page=2

2.登入
需要登入

通過Fiddler我們檢視到登入請求的地址和引數

# 地址
https://huaban.com/auth/
# 引數
 "email": "******",
 "password": "*****",
 "_ref":"frame"

我決定使用requestssession()功能來獲取使用者登入後的對談session資訊

3. 頁面資訊

我們通過右鍵檢視原始碼發現資料是儲存在javascript裡面的我們準備用正規表示式提取頁面資訊
圖片資訊資料

六、全部程式碼

#-*- coding:utf-8 -*-
import requests
import re
import json
# 匯入 requests  re正則 json

'''
login
登入花瓣 獲取session
'''
def login():
    login_url = 'https://huaban.com/auth/'
    # 登入地址
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0",
        "Accept": "application / json",
        "Content-type": "application/x-www-form-urlencoded; charset=utf-8",
        "Referer": "https://huaban.com/",
    }
    # 請求頭資訊

    session = requests.session()
    #sesson 對談

    login_data = {
        "email": "zengmumu%40126.com",
        "password": "zmm123",
        "_ref":"frame"
    }

    response = session.post(login_url, data=login_data, headers=headers,verify=False)
    # 登入頁面
    getPic(session,5)
    # 獲取圖片,前5頁


'''
getPic
解析頁面中的圖片地址
session 對談資訊
num     最大是頁數
'''
def getPic(session,num):
    for i in range(1,num+1):
        response = session.get("https://huaban.com/search/?q=%E5%A5%B3%E7%A5%9E&category=photography&page="+str(i))
        # 獲取頁面資訊("美女"文字編碼後的結果是"%E5%A5%B3%E7%A5%9E" )
        data = re.search('app\.page\[\"pins\"\] =(.*);\napp.page\[\"page\"\]', response.text, re.M | re.I | re.S)
        # 提取到當前頁面所在的所有圖片資訊
        data = json.loads(data.group(1))
        # 轉換字串為列表
        for item in data:
            url = "https://hbimg.huabanimg.com/" + item["file"]["key"]
            # 拼接圖片地址
            index = item["file"]["type"].rfind("/")
            type = "."+item["file"]["type"][index + 1:]
            # 獲取圖片的型別
            file_name = item["raw_text"]
            # 獲取圖片的中文名
            download_img(url, file_name,type)
            # 下載圖片

'''
下載圖片
url        圖片的地址
name   圖片的中文名
type     圖片的型別
'''
def download_img(url,name,type):
    response = requests.get(url,verify=False)
    # 使用requests 下載圖片
    index = url.rfind('/')
    file_name = name+url[index + 1:]+type
    # 獲取圖片的hash值
    print("下載圖片:" + file_name)
    # 列印圖片名稱
    save_name = "./photo/" + file_name
    # 圖片儲存的地址(注意photo要自己建一個,與當前.py檔案同一個資料夾)
    with open(save_name, "wb") as f:
        f.write(response.content)
        # 寫入圖片到本地
'''
定義主函數
'''
def main():
    login()

# 如果到模組的名字是__main__ 執行main主函數
if __name__ == '__main__':
    main()

線上練習:https://www.520mg.com/it
IT 入門感謝關注
IT 入門 感謝關注