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
五、分析頁面
- 頁面規律
我們單擊分頁按鈕,拿到頁面最後一個(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"
我決定使用requests
的session()
功能來獲取用戶登錄後的會話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)注