網(wǎng)絡(luò)爬蟲是Spider(或Robots、Crawler)等詞的意譯,是一種高效的信息抓取工具,它集成了搜索引擎技術(shù),并通過技術(shù)手段進行優(yōu)化,用以從互聯(lián)網(wǎng)搜索、抓取并保存任何通過HTML(超文本標(biāo)記語言)進行標(biāo)準(zhǔn)化的網(wǎng)頁信息。其作用機理是:發(fā)送請求給互聯(lián)網(wǎng)特定站點,在建立連接后與該站點交互,獲取HTML格式的信息,隨后轉(zhuǎn)移到下一個站點,并重復(fù)以上流程。通過這種自動化的工作機制,將目標(biāo)數(shù)據(jù)保存在本地數(shù)據(jù)中,以供使用。網(wǎng)絡(luò)爬蟲在訪問一個超文本鏈接時,可以從HTML標(biāo)簽中自動獲取指向其他網(wǎng)頁的地址信息,因而可以自動實現(xiàn)高效、標(biāo)準(zhǔn)化的信息獲取。 隨著互聯(lián)網(wǎng)在人類經(jīng)濟社會中的應(yīng)用日益廣泛,其所涵蓋的信息規(guī)模呈指數(shù)增長,信息的形式和分布具有多樣化、全球化特征,傳統(tǒng)搜索引擎技術(shù)已經(jīng)無法滿足日益精細化、專業(yè)化的信息獲取和加工需求,正面臨著巨大的挑戰(zhàn)。網(wǎng)絡(luò)爬蟲自誕生以來,就發(fā)展迅猛,并成為信息技術(shù)領(lǐng)域的主要研究熱點。當(dāng)前,主流的網(wǎng)絡(luò)爬蟲搜索策略有如下幾種。
創(chuàng)新互聯(lián)公司長期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為漣源企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、做網(wǎng)站,漣源網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
pcntl_fork或者swoole_process實現(xiàn)多進程并發(fā)。按照每個網(wǎng)頁抓取耗時500ms,開200個進程,可以實現(xiàn)每秒400個頁面的抓取。
curl實現(xiàn)頁面抓取,設(shè)置cookie可以實現(xiàn)模擬登錄
simple_html_dom 實現(xiàn)頁面的解析和DOM處理
如果想要模擬瀏覽器,可以使用casperJS。用swoole擴展封裝一個服務(wù)接口給PHP層調(diào)用
在這里有一套爬蟲系統(tǒng)就是基于上述技術(shù)方案實現(xiàn)的,每天會抓取幾千萬個頁面。
本文承接上面兩篇,本篇中的示例要調(diào)用到前兩篇中的函數(shù),做一個簡單的URL采集。一般php采集網(wǎng)絡(luò)數(shù)據(jù)會用file_get_contents、file和cURL。不過據(jù)說cURL會比file_get_contents、file更快更專業(yè),更適合采集。今天就試試用cURL來獲取網(wǎng)頁上的所有鏈接。示例如下:
?php
/*
* 使用curl 采集hao123.com下的所有鏈接。
*/
include_once('function.php');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '');
// 只需返回HTTP header
curl_setopt($ch, CURLOPT_HEADER, 1);
// 頁面內(nèi)容我們并不需要
// curl_setopt($ch, CURLOPT_NOBODY, 1);
// 返回結(jié)果,而不是輸出它
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
$info = curl_getinfo($ch);
if ($html === false) {
echo "cURL Error: " . curl_error($ch);
}
curl_close($ch);
$linkarr = _striplinks($html);
// 主機部分,補全用
$host = '';
if (is_array($linkarr)) {
foreach ($linkarr as $k = $v) {
$linkresult[$k] = _expandlinks($v, $host);
}
}
printf("p此頁面的所有鏈接為:/ppre%s/pren", var_export($linkresult , true));
?
function.php內(nèi)容如下(即為上兩篇中兩個函數(shù)的合集):
?php
function _striplinks($document) {
preg_match_all("'s*as.*?hrefs*=s*(["'])?(?(1) (.*?)\1 | ([^s]+))'isx", $document, $links);
// catenate the non-empty matches from the conditional subpattern
while (list($key, $val) = each($links[2])) {
if (!empty($val))
$match[] = $val;
} while (list($key, $val) = each($links[3])) {
if (!empty($val))
$match[] = $val;
}
// return the links
return $match;
}
/*===================================================================*
Function: _expandlinks
Purpose: expand each link into a fully qualified URL
Input: $links the links to qualify
$URI the full URI to get the base from
Output: $expandedLinks the expanded links
*===================================================================*/
function _expandlinks($links,$URI)
{
$URI_PARTS = parse_url($URI);
$host = $URI_PARTS["host"];
preg_match("/^[^?]+/",$URI,$match);
$match = preg_replace("|/[^/.]+.[^/.]+$|","",$match[0]);
$match = preg_replace("|/$|","",$match);
$match_part = parse_url($match);
$match_root =
$match_part["scheme"]."://".$match_part["host"];
$search = array( "|^http://".preg_quote($host)."|i",
"|^(/)|i",
"|^(?!http://)(?!mailto:)|i",
"|/./|",
"|/[^/]+/../|"
);
$replace = array( "",
$match_root."/",
$match."/",
"/",
"/"
);
$expandedLinks = preg_replace($search,$replace,$links);
return $expandedLinks;
}
?
本文題目:php爬蟲大數(shù)據(jù)抓取,php網(wǎng)頁爬蟲
文章地址:http://vcdvsql.cn/article0/hejooo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、微信公眾號、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)