實測單次採集了一萬條鏈結,並儲存。。。主要用於測試,請勿它用。。。。
注釋寫的很清楚,就不贅述了
//如果連線到遠地主機成功,則傳送請求
if($this->connect())
else
//如果響應頭部存在重定向,則對重定向傳送請求
if($this->redirect)
}if($this->roll_link)
else
}else
}else
else}}
private function connect()
else
return false;}}
private function sendrequest()
//請求行: 請求方法 請求路徑 http版本資訊
}//第一次請求時,url指向當前頁,後續請求時,referer總是指向上乙個頁面
if(empty($this->referer))
else
//客戶端可以接受的語言型別
if(!empty($this->accept_language))
//設定cookie,第一次請求時為空。第二次請求時,根據第一次請求完成時的頭部set-cookie資訊來決定
if(!empty($this->cookie))
else
//去掉最後的換行符
$cookie = substr($cookie, 0, strlen($cookie)-1)."\r\n";
}$this->header .= $cookie;}}
if(!empty($this->post_content))
}//保持長連線
if(!empty($this->connection))
//請求頭部到這裡完成
$this->header .="\r\n";
//echo $this->cmd_line.$this->header.$this->post_content; exit();
//傳送請求
$len = strlen($this->cmd_line.$this->header.$this->post_content);
if($len != @fwrite($this->conn, $this->cmd_line.$this->header.$this->post_content,$len))
//接受響應,每次讀取一行內容,首先解析響應頭
while($response_header = fgets($this->conn, 1024))
}// 判斷是否需要重定向
if(preg_match("#^(location:|uri:)#i",$response_header) && substr($this->response_num,0,1) == 3)
else
//包含完整的主機位址
$this->redirect = $matches[2];
}//判斷返回的資料的壓縮格式
if (preg_match("#^content-encoding: gzip#", $response_header) )
//根據返回的頭部資訊判斷主體首席資訊官度
if(preg_match('#^content-length:\s*(\d+)#i', $response_header, $len))
//根據返回的頭部資訊獲取cookie,用於下一次傳送請求時設定cookie
if(preg_match('#^set-cookie:#i', $response_header))
//解析完響應頭部則跳出迴圈
if(preg_match("/^\r?\n$/", $response_header) )
break;
$this->response_header=$response_header;
}//如果請求成功且響應碼為200
if($this->response_num==200)
else
$len=0;
//讀取請求返回的主體資訊
while($items = fread($this->conn, $this->response_body_length))
$filename = $dirname.'/'.basename($this->url);
$this->filename = $filename;
$len = $len+strlen($items);
$this->response_body = $items;
//當讀取完請求的主體資訊後跳出迴圈,不這樣做,貌似會被阻塞!!!
if($len >= $this->response_body_length)
}if($this->is_gzip)
echo str_repeat(" ", 2048);
echo "對鏈結".$this->url."發起請求
"; $this->getrolllink($this->response_body);
if($this->roll_link ===false )
$this->getimage($this->response_body);
}else if(substr($this->response_num, 0,1)==4)
else if($this->response_num == 403)
else if($this->response_num == 404)
else if($this->response_num == 408)
else if($this->response_num == 410)
}else if(substr($this->response_num, 0,1)==5)
else if($this->response_num == 502)
else if($this->response_num == 503)
else if($this->response_num == 504)
}else
}private function getrolllink($content)
else
}else
}else
}private function getnextgroup($content)
else
//h獲取下一組
foreach($next[1] as $item)}}
}//當請求的是第一頁的資訊時,是沒有上一組標籤的,此時只有一下組標籤
else if(count($next[1])==1)}}
else
}else
}private function getimage($content)
}else
}else
}else
}}//顯式的重新整理輸出快取
ob_implicit_flush(true);
//設定不使用超時
關於PHP資料採集
今天分享一下,簡單的資料採集。資料採集就是把某個 上的程式收錄到自己的資料庫或者 上。1 直接使用file get contents ps 開啟 php.ini 配置 中 allow url fopen on file get contents 中的一些引數 2 當然還有只是想摘取其中幾部分內容,那...
php 採集常用函式 PHP常用採集函式
獲取所有鏈結內容和位址function getallurl code 獲取所有的位址 function getimgsrc code else fnum if fnum fnum 0 return fnum 去除html標記 function text2html txt isu r n txt re...
php 爬蟲 PHP資料採集發布爬蟲軟體
藍天採集器是一款免費的資料採集發布爬蟲軟體,採用php mysql開發,可部署在雲伺服器,幾乎能採集所有型別的網頁,無縫對接各類cms建站程式,免登入實時發布資料,全自動無需人工干預!是大資料 雲時代 資料自動化採集的最佳雲端爬蟲軟體 關於軟體 藍天採集器 skycaiji 致力於 資料自動化採集發...