首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

圖片批量下載全流程實戰:從瀏覽器 Console 到 wget 自動化

     編輯:PHP 相關知識

痛點背景

遇到套圖、壁紙站、QQ 相冊需批量下載幾百張圖片,手動右鍵「另存為」效率極低。Windows 下有 DownloadThemAll + 迅雷組合,但遷移到 Linux (Ubuntu) + Chrome 後缺乏現成工具。

技術棧拆解

環節方案關鍵點
獲取圖片鏈接Chrome DevTools Console 執行 jQuery 腳本區分縮略圖 a>img 與原圖 img,提取 href 或 src
篩選有效圖片JS new Image() 預載寬高判斷過濾 logo/icon 等小圖,保留大圖
跨域傳遞鏈接本地部署 CodeIgniter 接口 $.getJSON() JSONP將鏈接寫入 urls.txt,繞過瀏覽器下載限制
高性能下載wget -i -b urls.txt 後台並發下載支持斷點續傳、限速、遞歸鏡像

核心 JS 腳本 (在 Console 執行)


// 1. 載入 jQuery (若頁面無)
var s=document.createElement('script');
s.src='https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js';
document.head.appendChild(s);

// 2. 等待載入後提取
setTimeout(function(){
    var urls = [];
    $('a[href]').each(function(){
        var href = $(this).attr('href');
        if (/\.(jpe?g|png|gif|webp)$/i.test(href)) urls.push(href);
    });
    $('img[src]').each(function(){
        var src = $(this).attr('src');
        if (/\.(jpe?g|png|gif|webp)$/i.test(src)) urls.push(src);
    });
    // 去重
    urls = [...new Set(urls)];
    console.log('共找到', urls.length, '張圖片');
    console.log(urls.join('\n'));
    
    // 3. 發送到本地接口 (需配置 CORS 或 JSONP)
    $.getJSON('https://localhost/api/save_urls?callback=?', {urls: urls}, function(r){
        console.log('服務端響應:', r);
    });
}, 2000);

本地接收接口 (CodeIgniter 示例)

<?php // application/controllers/Api.php
class Api extends CI_Controller {
    public function save_urls() {
        $urls = $this->input->get('urls');
        if (is_array($urls) && $urls) {
            file_put_contents(FCPATH . 'urls.txt', implode("\n", $urls) . "\n", FILE_APPEND);
            $this->output->set_content_type('application/json')->set_output(json_encode(['status'=>1, 'count'=>count($urls)]));
        } else {
            $this->output->set_status_header(400)->set_output(json_encode(['status'=>0, 'msg'=>'empty']));
        }
    }
}

終端一鍵下載

cd /var/www/html/your_project   # 進入 urls.txt 所在目錄
wget -i urls.txt -b -c --limit-rate=2m -P ./downloads
# -i 從文件讀取 URL
# -b 後台運行
# -c 斷點續傳
# --limit-rate 限速避免佔滿帶寬
# -P 指定保存目錄

避坑指南

  • 相對路徑:提取的 src="/img/a.jpg" 需補全域名 new URL(src, location.origin).href。
  • 防盜鏈 Referer:wget --referer="https://target.site/" -i urls.txt。
  • Cookie/登錄態:wget --load-cookies=cookies.txt -i urls.txt (先從瀏覽器導出 cookies.txt)。
  • 大量小文件:下載完後用 find . -size -10k -delete 清理無效縮略圖。
  • 法律風險:僅下載授權/公開內容,尊重 robots.txt 與版權。

進化方向:從「囧」到「順」

  1. Chrome Extension:將 Console 腳本封裝為擴展,一鍵提取並直接調用 chrome.downloads.download() API,省去本地服務 + wget 環節。
  2. PHP 直接下載:服務端用 curl_multi 或 Guzzle 異步下載,寫入服務器磁盤,再打包 ZIP 供前端下載。
  3. 持久化存儲:引入 SQLite/Redis 存儲多頁面鏈接,支持增量採集與去重。

總結

「Console 提取 → 本地接口存儲 → wget 下載」雖顯笨拙,但零依賴、跨平台、可控性強。通過不斷拆解問題、嘗試替代方案,最終形成適合自己工作流的工具鏈,這才是工程師成長的核心價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved