如何使用php採集抓取css圖片程式碼詳解

伊谢尔伦
發布: 2023-03-14 09:32:01
原創
1501 人瀏覽過

一. 抓取CSS 中的圖片: 
> 1. 先做好準備工作: 
> 第一步,先把CSS 原本的路徑存到$url變數裡,然後把CSS 的內容存在abc.css 中。 
> 因為考慮到經常碰到多個 CSS 檔案的狀況,所以小邪沒有直接填滿一個 CSS 路徑。 
> 而是把幾個 CSS 檔案的內容合併到一起,全部塞到 abc.css 文件裡面即可,嘎嘎嘎。

$data = file_get_contents('abc.css'); 

> 接著讀取CSS 檔案的內容到$data 變數中,然後用正規式把域名給取出。 
> 因為這裡考慮到許多圖片檔案用到了相對根路徑,比方說 /img/1.gif 和 img/1.gif。 
> 然後 CSS 原始位址在 http://www.jb51.net/css/ 那麼上面的兩個檔案位置是不同的。 

> 第一個檔案在 /upload/201109/20110926143903807.gif,因為它的路徑用到了相對根路徑。 
> 而第二個在 /upload/201109/20110926143903169.gif,它的路徑只是普通的相對路徑。 

2. 把圖片儲存資料夾建好: 
> 小邪這裡用了 is_dir 來確定資料夾是否存在,存在的話,就不用再建立第二遍了。 
> 呵呵,順便說下,is_file 函數可以確定此文件是否為正常文件,也可以確定是否存在。 
> 但 file_exists() 優越一點,因為某次看到有人在 Webmasterworld.com 上面討論過。

if (!is_dir('img')) { mkdir('img'); } 

> 3. 用正規式將圖片相對位址取出來: 

#$regex = '/url\(\'{0,1}\"{0,1}(.*?)\'{0,1}\"{0,1}\)/'; 
//這裡用正規式配對出圖片位址,要考慮三種情況,即url(1.gif) url('1.gif') url("1.gif")。 
//這三種寫法都是可以使用的,所以咱們就用上面的正規把裡面的 1.gif 取出來。
//\'{0,1} 表示單引號可能出現1次或0次,\" 則表示雙引號可能出現1次或0次。 
//中間必須使用懶惰匹配,不然取出來的就是1.gif" 而不是1.gif 鳥,O(∩_∩)P。
preg_match_all($regex,$data,$result); 

#> 4. 處理這些圖片: 

> 先使用一個循環,上面是用正規提取出來的第一分支內容數組給處理一下。 
> 額,這裡的第一個分支表示正規式裡面的第一個括號來著,呵呵,以此類推。 

foreach ($result[1] as $val) { } 

> 然後是用正則式判定,因為也要考慮到這樣 /upload/201109/20110926143903807.gif。 
> 這樣是使用了完整的路徑了,而不是想其他的一樣是 /img/1.gif 或 img/1.gif。 
> 所以單獨判斷一下,然後接著判斷這兩個,看看是 /img/1.gif 還是 img/1.gif。

<?php 
//URL是远程的完整图片地址,不能为空, $filename 是另存为的图片名字 
//默认把图片放在以此脚本相同的目录里 
function GrabImage($url, $filename=""){ 
//$url 为空则返回 false; 
if($url == ""){return false;} 
$ext = strrchr($url, ".");//得到图片的扩展名 
if($ext != ".gif" && $ext != ".jpg" && $ext != ".bmp"){echo "格式不支持!";return false;} 
if($filename == ""){$filename = time()."$ext";}//以时间戳另起名 
//开始捕捉 
ob_start(); 
readfile($url); 
$img = ob_get_contents(); 
ob_end_clean(); 
$size = strlen($img); 
$fp2 = fopen($filename , "a"); 
fwrite($fp2, $img); 
fclose($fp2); 
return $filename; 
} 
//测试 
GrabImage("http://www.php.cn/images/logo.gif", "as.gif"); 
?>
登入後複製

ob_start : 打開輸出緩衝 
This function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in n internald . (輸出是在內部緩衝儲存) 
// 
readfile : 讀入一個檔案並寫入到輸出緩衝 
傳回從檔案讀入的位元組數。如果出錯返回 FALSE 並且除非是以 @readfile() 形式調用,否則會顯示錯誤訊息
// 

ob_get_contents : Return the contents of the output buffer(返回輸出緩衝的內容) 
This will return the contents of the output buffer without clearing it or FALSE, if output buffering isn' t active. (如果輸出緩衝沒有活動(開啟),則傳回FALSE) 
// 
ob_end_clean() : Clean (erase) the output buffer and turn off output buffering(清除輸出緩衝) 。

以上是如何使用php採集抓取css圖片程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!