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

PHP 網頁圖片抓取實作教學:使用 cURL 與正則表達式批次下載圖片

     編輯:PHP 相關知識

前言:PHP 是網頁爬蟲的利器

PHP 擁有低門檻、快速開發的特性,雖然常被批評為「quick and dirty」,但正如名言所說:「這世界上只有兩種程式語言,一種是備受爭議的,一種是沒人用的。」只要能解決問題,PHP 就是優秀的工具。本文將示範如何用 PHP 結合 cURL 與正則表達式,從指定網頁批次抓取並下載圖片(支援 JPG、PNG、GIF、BMP 格式)。

核心程式碼架構

完整程式包含表單送出、cURL 取得網頁原始碼、正則比對圖片網址、以及將圖片二進位流寫入本地檔案四大步驟。以下為關鍵函式說明:

1. CurlGet:取得網頁內容

<?php
function CurlGet($url) {
    $url = str_replace('&', '&', $url);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
    curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
    curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
    $values = curl_exec($curl);
    curl_close($curl);
    return $values;
}
?>

2. get_pic:解析圖片網址並觸發下載

<?php
function get_pic($pic_url) {
    $data = CurlGet($pic_url);
    // 分別比對四種常見圖片格式
    $patterns = [
        '/<img.*?src\=\"(.*?\.jpg).*?>/',
        '/<img.*?src\=\"(.*?\.bmp).*?>/',
        '/<img.*?src\=\"(.*?\.png).*?>/',
        '/<img.*?src\=\"(.*?\.gif).*?>/'
    ];
    $all_matches = [];
    foreach ($patterns as $pattern) {
        preg_match_all($pattern, $data, $matches);
        $all_matches = array_merge($all_matches, $matches[1]);
    }
    echo '=============================================抓取開始=============================================<br />';
    foreach ($all_matches as $img_url) {
        download_image($img_url);
    }
    echo '=============================================抓取結束=============================================<br />';
}
?>

3. download_image:將圖片二進位資料寫入檔案

<?php
function download_image($pic_item) {
    // 取得檔名(去除路徑)
    $pattern_type = '/.*\/(.*?)$/';
    preg_match_all($pattern_type, $pic_item, $match_type);
    $filename = $match_type[1][0];
    
    // 以二進位模式開啟檔案並寫入
    $write_fd = @fopen($filename, "wb");
    echo "圖片網址:{$pic_item}<br />";
    @fwrite($write_fd, CurlGet($pic_item));
    @fclose($write_fd);
}
?>

使用方式與注意事項

  1. 建立一個包含上述函式的 PHP 檔案(如 fetch_images.php)。
  2. 在瀏覽器開啟該檔案,輸入目標網頁網址並送出表單。
  3. 程式會自動在當前目錄建立圖片檔案。

提醒:實際部署時請加入錯誤處理(如檢查 fopen、curl_exec 回傳值)、限制下載大小、遵守目標網站 robots.txt 以及版權規範。此外,現代網頁多採用 JavaScript 動態載入圖片,單純抓取靜態 HTML 可能無法取得所有圖片,進階需求建議搭配 Headless Chrome(如 Puppeteer)或使用現成爬蟲框架(如 Goutte、Symfony Panther)。

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