2013-02-04 76 views
0

我有一個php網絡爬蟲,在localhost上運行時,經常會在幾頁後凍結,讓我的網頁瀏覽器顯示一個加載符號,而沒有更多。是否有任何Apache配置來增強網絡爬蟲的性能?

我已經通過我的代碼檢查過,可能會有一個錯誤..雖然在過去的幾個小時裏看着它,我準備探索其他的可能性。

當我的刮刀正在運行時,由於不同的過程開始和結束,它會轉儲信息。我也經常刷新();確保瀏覽器向他們顯示最新消息。 (這給控制檯類型看瀏覽器)。

我現在正在查看Apache配置的原因是因爲我的程序並不總是在同一個地方凍結。有時它凍結時,它正在尋找新的URL的「a」的標籤添加到隊列中,其他時間下載XHTML數據本身結冰時,在這一點上:

private function _getXhtml() { 
     $curl = curl_init(); 
     if (!$curl) { 
      throw new Exception('Unable to init curl. ' . curl_error($curl)); 
     } 
     curl_setopt($curl, CURLOPT_URL, $this->_urlCurrent); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
     // Faking user agent 
     curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
     $xhtml = curl_exec($curl); 
     if (!$xhtml) { 
      $xhtml = null; 
      echo 'PROBLEM' . $this->_urlCurrent . '<br />'; 
      //throw new Exception('Unable to read XHTML. ' . curl_error($curl)); 
     } 
     curl_close($curl); 
     return $xhtml; 
    } 

除了這一切,我我想知道是否有任何修改Apache的配置文件或PHP.ini,我可以做的,以加強本地主機環境的網頁抓取?

任何幫助,將不勝感激。

UPDATE:

我相信我已經把範圍縮小對Zend_Dom_Query。這就是爲什麼我的應用程序在不同的階段崩潰(有時當它抓取爬蟲列表的href和其他時間尋找頁面內的某些東西來「收穫」)

這是我的輸出示例。

在這裏,應用程序崩潰的第一頁..當獲取一個網址。

string(25) "Scraping page number 0..." 
string(9) "Mining..." 
string(15) "Getting <a>...." 
string(24) "Finished getting <a>...." 
string(20) "Getting <a href>...." 
string(43) "Mining page http://www.a-site.co.uk/ ..." 
string(17) "New page found..." 
string(18) "Page confirmed...." 
string(29) "Finished Getting <a href>...." 
string(20) "Getting <a href>...." 
string(43) "Mining page http://www.a-site.co.uk/ ..." 
string(29) "Finished Getting <a href>...." 
string(20) "Getting <a href>...." 

在這裏,而提取元素

string(25) "Scraping page number 5..." 
string(9) "Mining..." 

//This bit loops for around 70 URLS 
string(15) "Getting <a>...." 
string(24) "Finished getting <a>...." 
string(20) "Getting <a href>...." 
string(48) "Mining page http://www.a-site.org ..." 
string(29) "Finished Getting <a href>...." 
//end loop 

string(70) "Harvesting http://www.a.site.org/a-url-path/..." 
string(19) "Harvesting html element..." 
應用失敗
+0

哦,我應該提到。它從不拋出異常。它基本上就像沒有加載一樣。它可能是我正在抓取的主機,但是我已經嘗試了多個具有相同(或相似)結果的網站。 –

+0

我不知道你是否最終在同一時間打開太多的請求。你可以/你在你的「控制檯」上寫下你的要求嗎?難道是因爲你在本地主機上運行,​​你的爬蟲最終會試圖索引自己 - 這會讓你陷入無限循環? – Floris

+0

你可以讓它只用一個「簡單」的網站 - 一個只有簡單的HTML,也許幾張圖片?換句話說 - 這是規模問題還是邏輯問題? – Floris

回答

0

腳本看起來不錯所以它可能是你爬 嘗試增加

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); //timeout in seconds. 
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //timeout in seconds. 
網站

你也可以嘗試讓你的刮板更像一個真正的瀏覽器。我個人使用我自己的標題,我可以找到使用fiddler2,然後在捲曲中重新創建它們。