2012-07-07 65 views
1

我有一個關於在PHP中抓取網頁的小問題。我必須在一家大型網上商店中抓取約90 000種產品。我在PHP中試過,但一件產品需要2-3秒,這很糟糕。任何提示,如何更快地做到這一點?也許一個C++多線程版本?但是,HTTP請求的時間呢?我的意思是,這是PHP的限制與否?感謝您的小費。抓取頁面更快[PHP]

+0

兩天似乎並不像它會是壞的時間量。 ..當你編寫替代解決方案時,它會完成。話雖如此,嘗試使用multi_curl功能進行並行請求。 – Lusitanian 2012-07-07 20:25:58

回答

1

我不認爲這是PHP的問題,但它可能取決於連接速度/計算機的速度。儘管如此,我從來沒有遇到過PHP/cURL的速度問題。

只是做多個線程(即多個連接一次),我建議你使用cURL但那只是因爲我熟悉它。

下面是我用於多線程與捲曲刮指南: http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading

必須非常小心,不要意外造成的業務情況拒絕你的腳本。但我相信你已經遠離了這種可能性。

+0

非常感謝您的提示和鏈接。我會看一看,並會小心。 – user1175307 2012-07-07 20:27:27

+0

出於好奇你的連接速度/計算機規格是什麼?我可以更好地告訴你問題可能是什麼。 – 2012-07-07 20:28:29

2

這是一個非常模糊的問題。當你對你的代碼進行基準測試時,最慢的部分是什麼?是網絡傳輸時間嗎?使用不同的語言(或多個線程)不會改變這一點。

解析頁面花費了多少時間?你最近怎麼樣?如果您使用XML庫來解析整個DOM,您是否可以僅僅尋找關鍵字(甚至是正則表達式)?這不太準確(在某種意義上說不太正確),但也許更快。

你用什麼算法進行分析?其他數據結構會提供更好的性能嗎?作爲一個簡單的例子,如果你花費大量的時間遍歷數組,哈希映射可能更合適。

PHP可以在多個進程中運行。如果您一次啓動多個腳本實例(在不同的頁面上),會發生什麼情況?總時間減少了嗎?

最終你已經描述了一個非常普遍的問題,所以我不能提供非常具體的解決方案,但沒有內在的原因,PHP爲什麼不適合這項任務。當你確定什麼是緩慢的(不管你使用什麼語言),你應該能夠更準確地解決如何解決它。

0

如果您的程序運行緩慢,我的建議是運行一個分析器,並分析它爲什麼運行緩慢。

此建議適用於任何語言,但在PHP的情況下,您需要的分析器軟件被稱爲xDebug

這是一個PHP擴展,所以你需要將它安裝到你的服務器。如果您在ISP的服務器上運行,那麼您可能沒有權限執行此操作,但您可以隨時在本地PC上使用PHP進行安裝,並在那裏運行測試。

一旦你安裝了xDebug,打開PHP.ini中的分析功能(請參閱xDebug文檔獲取相關說明),然後運行你的程序。然後它會生成分析器文件,這些文件可以用來分析程序正在做什麼。

下載KCacheGrind執行分析。這將生成調用樹信息,準確顯示程序運行時發生的情況以及每個函數調用花費的時間。

有了這些信息,您可以查找緩慢運行的函數調用,並計算出發生了什麼。通常,慢編碼的原因是寫某種東西時的某種低效率; xDebug將幫助你找到它。

希望有所幫助。

0

你有99%的概率,PHP不是問題。它相當於eshop網絡服務器或任何其他網絡延遲。

我知道這一點,因爲我已經這麼做了好幾個月了,即使你的代碼有很多正則表達式,數據抓取在PHP中也非常快。

解決方案加快這一點? 由於磁盤空間便宜,因此預先使用命令行抓取工具緩存所有網站。捲曲可以做到這一點,以及httrack。它將比PHP爬行更快更穩定。

然後讓PHP單獨做分析,你會看到希望PHP大嚼幾十頁每分鐘,希望這有助於:)