【python】遇上COS美圖怎么辦?當(dāng)然是大膽沖呀~

前言

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

在這炎熱得夏天~

我不由得想要東西來放松一下~

于是,我采集起了小姐姐COS圖~

開發(fā)環(huán)境:

  • Python 3.8
  • Pycharm

模塊使用:

第三方模塊 需要安裝 在cmd里面 進行 pip install requests / parsel

  • requests
  • parsel

如何安裝python第三方模塊:

  1. win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
  2. 在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)步驟

  1. 發(fā)送請求, 對于圖集目錄頁發(fā)送請求

  2. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)

  3. 解析數(shù)據(jù), 提取我們想要 圖集詳情頁url地址

  1. 發(fā)送請求, 對于圖集詳情頁url地址 發(fā)送請求

  2. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)

  3. 解析數(shù)據(jù), 提取圖片url地址 以及標(biāo)題

  1. 保存數(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ù)制代碼去試試哦 ??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容