2011-01-11 88 views
0

我已經使用simplehtmldom編寫了自己的網絡爬蟲,並且爬網過程工作得非常好。它抓取起始頁面,將所有鏈接添加到數據庫表格中,設置會話指針,然後元素刷新頁面以進入下一頁。這一直持續下去,直到它用完鏈接使用cron編寫一個PHP網絡爬蟲

這工作正常,但顯然大網站的爬網時間非常繁瑣。我希望能夠加快一點,但可能會讓它成爲一個cron工作。

除了將內存限制/執行時間設置得更高之外,是否可以使其儘可能快速和高效?

+1

搜索SO或Google for php profiler。你可以確定究竟是什麼放緩了一切。從那裏,你可以問一個更具體的問題,比如'我如何加快`file_get_contents()`'的速度。 – 2011-01-11 17:18:16

+1

我將在網站上使用此網站我/我的公司構建的網站僅用於檢查死鏈接,並檢查所有鏈接是否有合適的錨點標題,確保所有網頁都有標題/ h1標記等。 – Horse 2011-01-12 09:47:34

回答

1

內存不能是爬蟲的問題。

一旦完成了一個頁面並將所有相關數據寫入數據庫,您應該刪除爲該作業創建的所有變量。

100頁之後的內存使用量必須與1頁之後相同。如果不是這種情況,請查明原因。

您可以拆分不同進程之間的工作:通常解析頁面不會花費太多時間加載它,因此您可以將所有找到的鏈接寫入數據庫,並有多個其他進程將文檔下載到一個臨時目錄。 如果你這樣做,你必須確保

  1. 沒有鏈接被下載到工人。
  2. 如果沒有,您的進程將等待新鏈接。
  3. 臨時文件在每次掃描後被刪除。
  4. 當您的鏈接用完時,下載過程將停止。你可以通過設置一個「kill flag」來歸檔這個文件,這個文件可以是一個具有特殊名字的文件,也可以是數據庫中的一個條目。
2

看起來像是在網絡瀏覽器中運行腳本。你可以考慮從命令行運行它。您可以執行多個腳本來同時在不同的頁面上進行爬網。這應該會加快速度。

+0

他說他想將其轉換爲一個cronjob,所以我認爲他已經把它寫成一個命令行腳本。 – 2011-01-11 17:47:28