php資料採集

2021-06-27 17:05:40 字數 3950 閱讀 5960

實測單次採集了一萬條鏈結,並儲存。。。主要用於測試,請勿它用。。。。

注釋寫的很清楚,就不贅述了

//如果連線到遠地主機成功,則傳送請求

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 致力於 資料自動化採集發...