前言
嗨嘍~大家好呀,這里是魔王吶 !

在這炎熱得夏天~
我不由得想要東西來放松一下~
于是,我采集起了小姐姐COS圖~

開發(fā)環(huán)境:
- Python 3.8
- Pycharm
模塊使用:
第三方模塊 需要安裝 在cmd里面 進行 pip install requests / parsel
- requests
- parsel
如何安裝python第三方模塊:
- win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
- 在pycharm中點擊Terminal(終端) 輸入安裝命令
實現(xiàn)基本思路:
一. 數(shù)據(jù)來源分析:
1、分析這些圖片url地址在哪?
- 開發(fā)者工具抓包分析, 分析圖片鏈接在什么地方
I. F12 打開開發(fā)者工具 --> 刷新網(wǎng)頁 <讓本網(wǎng)頁數(shù)據(jù)內(nèi)容重新加載一遍>
II. 通過 Img 可以找圖片url地址
-------------------分析圖片url地址可以從哪里獲得-----------------------
III. 通過圖片鏈接參數(shù) 去搜索 數(shù)據(jù)從哪里來的
獲取所有圖集 ---> 獲取所有圖集詳情頁url --> 目錄頁面發(fā)送請求
二. 代碼實現(xiàn)步驟
發(fā)送請求, 對于圖集目錄頁發(fā)送請求
獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
解析數(shù)據(jù), 提取我們想要 圖集詳情頁url地址
發(fā)送請求, 對于圖集詳情頁url地址 發(fā)送請求
獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
解析數(shù)據(jù), 提取圖片url地址 以及標(biāo)題
- 保存數(shù)據(jù), 把圖片內(nèi)容 保存本地文件夾

代碼
# 導(dǎo)入數(shù)據(jù)請求模塊 --> 第三方模塊 需要 在cmd里面 pip install requests
import requests
# 導(dǎo)入數(shù)據(jù)解析模塊 --> 第三方模塊 需要 在cmd里面 pip install parsel
import parsel
# 導(dǎo)入正則模塊 --> 內(nèi)置模塊 不需要安裝
import re
# 導(dǎo)入文件操作模塊 --> 內(nèi)置模塊 不需要安裝
import os.path

# 構(gòu)建翻頁
for page in range(2, 450):
# format 字符串格式化方法
print(f'正在采集第{page}頁的數(shù)據(jù)內(nèi)容')
# 確定請求url地址 <目錄頁>

偽裝 請求頭 防止被反爬
headers = {
# 瀏覽器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
發(fā)送請求
通過requests模塊里面get請求方法, 對于url地址發(fā)送請求, 并且攜帶上headers請求頭偽裝, 最后用自定義變量response接受返回數(shù)據(jù)
response = requests.get(url=url, headers=headers)
# <Response [200]> 表示請求成功了 響應(yīng)對象
print(response)
獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù) print(response.text)
解析數(shù)據(jù), 提取我們想要 圖集詳情頁url地址
推薦使用 parsel
獲取 response.text ---> 返回html字符串?dāng)?shù)據(jù)內(nèi)容
css選擇器 根據(jù)標(biāo)簽屬性內(nèi)容, 提取數(shù)據(jù)
轉(zhuǎn)換數(shù)據(jù) 轉(zhuǎn)成可以解析對象 <Selector xpath=None data='<html>\r\n<head>\r\n <meta charset="ut...'>
selector = parsel.Selector(response.text)
使用css選擇器提取數(shù)據(jù) .pics ul li .tits css語法定位標(biāo)簽/元素 getall 獲取所有
href = selector.css('.pics ul li .tits::attr(href)').getall()
for循環(huán)遍歷 提取列表元素
for index in href:

發(fā)送請求
對于圖集詳情頁url地址 發(fā)送請求 5. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
index_data = requests.get(url=index_url, headers=headers).text
解析數(shù)據(jù)
提取圖片url地址 以及標(biāo)題
index_selector = parsel.Selector(index_data)
提取圖片鏈接
.talk_pic img 定位元素/標(biāo)簽 img<標(biāo)簽名>::attr(src) 提取屬性 src <屬性名>
img_url_list = index_selector.css('.talk_pic img::attr(src)').getall()
圖片標(biāo)題
title = index_selector.css('.border_bottom::text').get()
替換特殊字符
new_title = title = re.sub(r'[\/:*?"<>|]', '', title)
保存數(shù)據(jù)
num = 1
# 自動創(chuàng)建文件夾
file = f'img\\{new_title}\\'
# 如果沒有這個文件夾
if not os.path.exists(file):
# 自動創(chuàng)建文件夾
os.makedirs(file)
# for循環(huán)遍歷 提取列表元素
for img_url in img_url_list:
# 獲取圖片二進制數(shù)據(jù)
img_content = requests.get(url=img_url, headers=headers).content
# 保存圖片
with open(file + new_title + str(num) + '.jpg', mode='wb') as f:
# 寫入數(shù)據(jù)
f.write(img_content)
# 每次循環(huán) +1
num += 1
print(title, img_url)
效果




尾語
要成功,先發(fā)瘋,下定決心往前沖!
學(xué)習(xí)是需要長期堅持的,一步一個腳印地走向未來!
未來的你一定會感謝今天學(xué)習(xí)的你。
—— 心靈雞湯
本文章到這里就結(jié)束啦~感興趣的小伙伴可以復(fù)制代碼去試試哦 ??