考慮到單純的采集一個網頁的圖片,太麻煩,所以直接采集他的列表頁,獲取列表的url然后在一一采集,但是用php匹配列表頁的url太麻煩,第一列表頁有很多無效url這對我這個正則小菜鳥實在是個問題,看了一下列表頁的結 " /> 538prom国产在线视频一区,亚洲免费在线观看,三级成人电彭

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP批量采集下載美女圖片的實現代碼

設計思路

考慮到單純的采集一個網頁的圖片,太麻煩,所以直接采集他的列表頁,獲取列表的url然后在一一采集,但是用php匹配列表頁的url太麻煩,第一列表頁有很多無效url這對我這個正則小菜鳥實在是個問題,看了一下列表頁的結構,果斷采用jquery獲取url,jquery的萬能選擇器又再次強大起來了。

jquery獲取url,然后ajax傳遞url―>對應php文件,遍歷url參數―->單頁面采集保存圖片

jquery程序
復制代碼 代碼如下:
<script src="http://www.cztv.com/uibase/jquery.js"></script>
<script >
$(document).ready(function(){
var hrefs ='';
$('.f_folder>a').each(function(i){
var href = $('.f_folder:eq('+i+')>a:eq(0)').attr('href');
if(href!='undefined'){
hrefs +=href+',';
}
})
$.getJSON("http://www.****.com/365/getimg.php?hrefs="+hrefs+"&callback=?", function(data){
//alert(data.info);
});
});
</script>


這里把url拼接成‘,'分割的字符串傳遞url,使用getjson是為了跨域需要,關于getjson常見的幾個問題可以參看<$.getjson遇到的幾個問題>

php采集程序
復制代碼 代碼如下:
<?php
// 抓起365圖片
error_reporting(E_ALL ^ E_NOTICE);
set_time_limit(0);//設置php超時時間
/**
* 得到當前時間
*/
function getMicrotime() {

list ($usec, $sec) = explode(" ", microtime());
return ((float) $usec + (float) $sec);
}
$stime = getMicrotime();

$callback = $_GET['callback'];
$hrefs = $_GET['hrefs'];
$urlarray = explode(',',$hrefs);

//獲取指定url的所有圖片
function getimgs($url){
$dirname = basename($url,".php");
if(!file_exists($dirname)){
mkdir('365/'.$dirname.'');
}
clearstatcache();
$data = file_get_contents($url);
preg_match_all("/(href|src)=(["|']?)([^ "'>]+.(jpg|png|PNG|JPG|gif))/2/i", $data, $matches);
//$matches[3] = array_unique($matches[3]);
unset($data);
$i=0;

if(count($matches[3])>0){
foreach($matches[3] as $k=>$v){
//簡單判斷是否是標準url,而不是相對路徑
if(substr($v,0,4)=='http'){

$ext = pathinfo($v,PATHINFO_EXTENSION);//圖片擴展

if(!file_exists('365/'.$dirname.'/'.$k.'.'.$ext)){
file_put_contents('365/'.$dirname.'/'.$k.'.'.$ext,file_get_contents($v));
$i++;
}else{
unset($v);
}
clearstatcache();
}else{
unset($v);
}
}
unset($matches);
return $i;
}
}

foreach($urlarray as $k=>$v){
if($v!=''){
$j +=getimgs($v);
}
}
$etime = getMicrotime();
echo "合計采集了".$j."張圖片";
echo "用時".($etime-$stime)."秒";


考慮到性能問題:在getimgs方法中所用的變量都是使用后便注銷(unset)了,以便釋放內存。

設計到的幾個知識點

判斷是否是標準有效圖片url
if(substr($v,0,4)=='http')這個只是簡單的判斷一下匹配到的圖片url是否是標準的url,因為采集的圖片可能是相對路徑的,這里我直接放棄這種圖片的采集,當然你也可以把這種圖片還原成標準圖片路徑,還有一個問題就是即使是標準url格式,這樣的圖片也未必可以采集,因為你不知道這個圖片是否還有,也許這個圖片url已經無效了,如果你想更嚴格的判斷這個圖片url是否真實有效可以推薦看我之前的《php判斷遠程url是否有效的幾種方法》有三種方法可以驗證是否是有效url。

獲取圖片格式

$ext = pathinfo($v,PATHINFO_EXTENSION);//圖片擴展

這里使用了pathinfo的方法,總結有7種方法可以獲取到文件的格式,推薦文章:《php判斷圖片格式的七種方法》

下載保存到本地

file_put_contents('365/'.$dirname.'/'.$k.'.'.$ext,file_get_contents($v));
file_put_contents() 函數把一個字符串寫入文件中。
與依次調用 fopen(),fwrite() 以及 fclose() 功能一樣。
file_get_contents() 函數把整個文件讀入一個字符串中。

因為服務器支持file_get_contents,如果服務器把這個函數禁用了,可以使用curl,這個工具要比file_get_contents更加強大,推薦學習《CURL的學習和應用(附多線程)》,可以使用curl的多線程下載存儲,效果更牛逼

清除文件操作緩存

clearstatcache() 函數清除文件狀態緩存。clearstatcache() 函數會緩存某些函數的返回信息,以便提供更高的性能。但是有時候,比如在一個腳本中多次檢查同一個文件,而該文件在此腳本執行期間有被刪除或修改的危險時,你需要清除文件狀態緩存,以便獲得正確的結果。要做到這一點,就需要使用 clearstatcache() 函數。官方手冊:

程序執行時間計算

復制代碼 代碼如下:
/**

* 得到當前時間

*/

function getMicrotime() {
list ($usec, $sec) = explode(" ", microtime());
return ((float) $usec + (float) $sec);
}


可以參考本博客文章;《獲取php頁面執行時間,數據庫讀寫次數,函數調用次數等【THINKphp】》

最后看一下效果;



409秒采集了214張圖片,大概2秒下載保存了一張圖片,圖片總大小約62M,這樣看來:

一個小時60*60可以大約下載1800張美女圖片。

php技術PHP批量采集下載美女圖片的實現代碼,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 牲高潮99爽久久久久777 | 年轻的朋友4在线看中文字幕 | 成人性生交大片免费看4 | 久久精品中文字幕有码日本 | 性xxxx18公交车 | 樱花草在线观看影院 | 在线观看永久免费网址 | 第一次破女初国产美女 | 中国女人内谢69xxxxxx直播 | 邪恶肉肉全彩色无遮琉璃神社 | 久草在线福利视频在线播放 | 扒开美女下面粉嫩粉嫩冒白浆 | 一区在线观看在线 | 天美传媒在线观看免费完整版 | 理论片午午伦夜理片影院 | 欧美手机在线 | 亚洲精品成人无码区一在线观看 | 成人在线免费视频播放 | 天美传媒在线完整免费观看网站 | 亚洲日产2020乱码草莓毕 | 涩涩爱涩涩电影网站 | 国产免费人成在线视频有码 | 国产精品日本不卡一区二区 | 秋霞电影网午夜鲁丝片 | 99精品成人无码A片观看金桔 | 日本理论片和搜子同居的日子2 | 少妇伦子伦情品无吗 | 黄页网站免费视频大全9 | 国产一区二区内射最近更新 | 十分钟免费观看高清视频大全 | 国自产精品手机在线视频 | 用震蛋调教女性下面视频 | 亚洲欧美日韩一级特黄在线 | 亚洲无吗视频 | 亚洲中文字幕手机版 | 午夜DV内射一区区 | 特黄特色大片免费播放器试看 | 二级特黄绝大片免费视频大片 | 99在线在线视频观看 | 无码区国产区在线播放 | 一本色道久久88综合日韩精品 |