17-用python爬取下(xià)載女神照片 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

您當前位置>首頁 » 新聞資(zī)訊 » 技術(shù)分享 >

17-用python爬取下(xià)載女神照片

發表時間:2020-10-13

發布人:葵宇科技

浏覽次數:39

今天咱們要爬取花(huā)瓣網 https://huaban.com/
設計師(shī)尋找靈感的天堂!有海量的圖片素材可(kě)以下(xià)載,是一個(gè)優質圖片靈感庫

這次我們用 requests 登錄花(huā)瓣網,爬取頁面,再用正則與json提取有用信息,最後把獲取的圖片信息 保存到本地

一 、用到技術(shù)

  • python 基礎
  • requests 登錄頁面獲取session用戶會話,下(xià)載圖片
  • 正則表達式 提取頁面的有用信息
  • json解析頁面中(zhōng)的圖片

二、 目标頁面

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

三、結果

結果

四、安裝 必要的庫

  • win+R 打開運行
  • 輸出cmd 進入控制台
  • 分别安裝requests
pip install  requests 

五、分析頁面

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

2.登錄
需要登錄

通(tōng)過Fiddler我們查看到登錄請求的地址和(hé)參數

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

我決定使用requestssession()功能來獲取用戶登錄後的會話session信息

3. 頁面信息

我們通(tōng)過右鍵查看源代碼發現數據是保存在javascript裡面的我們準備用正則表達式提取頁面信息
圖片信息數據

六、全部代碼

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

'''
login
登錄花(huā)瓣 獲取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
解析頁面中(zhōng)的圖片地址
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))
        # 獲取頁面信息("美女"文(wén)字編碼後的結果是"%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"]
            # 獲取圖片的中(zhōng)文(wén)名
            download_img(url, file_name,type)
            # 下(xià)載圖片

'''
下(xià)載圖片
url        圖片的地址
name   圖片的中(zhōng)文(wén)名
type     圖片的類型
'''
def download_img(url,name,type):
    response = requests.get(url,verify=False)
    # 使用requests 下(xià)載圖片
    index = url.rfind('/')
    file_name = name+url[index + 1:]+type
    # 獲取圖片的hash值
    print("下(xià)載圖片:" + file_name)
    # 打印圖片名稱
    save_name = "./photo/" + file_name
    # 圖片保存的地址(注意photo要自己建一個(gè),與當前.py文(wén)件同一個(gè)文(wén)件夾)
    with open(save_name, "wb") as f:
        f.write(response.content)
        # 寫入圖片到本地
'''
定義主函數
'''
def main():
    login()

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

在線練習:https://www.520mg.com/it
IT 入門感謝關(guān)注
IT 入門 感謝關(guān)注

相關(guān)案例查看更多