今天咱們要爬取花瓣網 https://huaban.com/
設計師尋找靈感的天堂!有海量的圖片素材可以下載,是一個優質圖片靈感庫
這次我們用 requests 登錄花瓣網,爬取頁面,再用正則與json提取有用資訊,最后把獲取的圖片資訊 保存到本地
一 、用到技術
python 基礎requests登錄頁面獲取session用戶會話,下載圖片正則運算式提取頁面的有用資訊json決議頁面中的圖片
二、 目標頁面
https://huaban.com/search/?q=女神&category=photography

三、結果

四、安裝 必要的庫
- win+R 打開運行
- 輸出cmd 進入控制臺
- 分別安裝
requests
pip install requests
五、分析頁面
- 頁面規律
我們單擊分頁按鈕,拿到頁面最后一個引數的規律
第一頁: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"
我決定使用requests的session()功能來獲取用戶登錄后的會話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 入門 感謝關注
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/172408.html
標籤:其他
