2012-06-08 90 views
0

比方說,我createad一個網頁抓取PHP頁面(getdata.php)即得到由捲曲的特定網站的網頁內容,比保存到一個txt文件或數據庫的一些有用的信息。的getdata.php如何使網頁抓取頁面連續工作

僞代碼,

min = get latest search id from database 
max = 1.000.000 (yes one million different pages) 

while (min < max) { 

    url = "http://www.website.com/page.php?id=".$min 
    content = getContentFromURL(url) 
    saveUsefulInfoToDb(content) 
    min++ 
    set latest search id as min in database 
} 

這是確定的,該proccess是,

  1. 打開getdata.php瀏覽器的
  2. 等待
  3. 還等什麼,因爲有大約100萬頁將被刮掉。
  4. 等待
  5. 最後請求超時。
  6. 失敗

所以,問題是我不知道我怎樣才能使這個proccess合理。在瀏覽器上打開頁面並等待它完成抓取URL,我認爲這是一個非常糟糕的做法。

我怎樣才能使訪問getdata.php可運行在比如cron背景是什麼?

這樣做的最佳方法是什麼?

謝謝。在代碼

set_time_limit(0); 
ignore_user_abort(true); 

頂部

+1

爲什麼你不能有一個cron工作? –

回答

2

使用,然後使用一個cron每天或當它需要火起來。你一定希望這是一個後臺進程,而不是一個網頁。這兩行將允許它無限期地作爲網頁或cmd行腳本運行。如果你希望把它作爲一個網頁,你仍然可以使用cron來「火」它關閉了線一樣

0 0 * * * /usr/bin/curl "http://yoursite.com/getdata.php" >> "/var/www/errors.log" 

一些建議,因爲我已經做了很多次:絕對會讓記錄功能打印到文件中,這樣你可以看到它在做什麼,因爲它運行或你不會有任何的知名度和程序到PHP文件切斷開關,所以你可以告訴它停止運行,而不必使用UNIX頂部或重新啓動Apache。如果在某個小時之後,它會停止,以免它運行時間超過一天,而第二個實例啓動並且你有幾個一次運行,這可能是一個好主意。

3

除了@hackartists答案,我想補充不通過瀏覽器在所有調用這個PHP頁面。相反,在命令行

http://www.php.net/manual/en/features.commandline.introduction.php

開放訪問getdata.php調用它的瀏覽器

應該

計劃的GetData。PHP從命令行使用cron運行

此外,登錄成功或失敗,這樣就可以設置要知道一些日誌文件監控,當你的網頁抓取作業失敗(畢竟,你不想坐每天瀏覽一次瀏覽器並自行監控)。