我有一個關於在PHP中抓取網頁的小問題。我必須在一家大型網上商店中抓取約90 000種產品。我在PHP中試過,但一件產品需要2-3秒,這很糟糕。任何提示,如何更快地做到這一點?也許一個C++多線程版本?但是,HTTP請求的時間呢?我的意思是,這是PHP的限制與否?感謝您的小費。抓取頁面更快[PHP]
回答
我不認爲這是PHP的問題,但它可能取決於連接速度/計算機的速度。儘管如此,我從來沒有遇到過PHP/cURL的速度問題。
只是做多個線程(即多個連接一次),我建議你使用cURL但那只是因爲我熟悉它。
下面是我用於多線程與捲曲刮指南: http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading
必須非常小心,不要意外造成的業務情況拒絕你的腳本。但我相信你已經遠離了這種可能性。
非常感謝您的提示和鏈接。我會看一看,並會小心。 – user1175307 2012-07-07 20:27:27
出於好奇你的連接速度/計算機規格是什麼?我可以更好地告訴你問題可能是什麼。 – 2012-07-07 20:28:29
這是一個非常模糊的問題。當你對你的代碼進行基準測試時,最慢的部分是什麼?是網絡傳輸時間嗎?使用不同的語言(或多個線程)不會改變這一點。
解析頁面花費了多少時間?你最近怎麼樣?如果您使用XML庫來解析整個DOM,您是否可以僅僅尋找關鍵字(甚至是正則表達式)?這不太準確(在某種意義上說不太正確),但也許更快。
你用什麼算法進行分析?其他數據結構會提供更好的性能嗎?作爲一個簡單的例子,如果你花費大量的時間遍歷數組,哈希映射可能更合適。
PHP可以在多個進程中運行。如果您一次啓動多個腳本實例(在不同的頁面上),會發生什麼情況?總時間減少了嗎?
最終你已經描述了一個非常普遍的問題,所以我不能提供非常具體的解決方案,但沒有內在的原因,PHP爲什麼不適合這項任務。當你確定什麼是緩慢的(不管你使用什麼語言),你應該能夠更準確地解決如何解決它。
如果您的程序運行緩慢,我的建議是運行一個分析器,並分析它爲什麼運行緩慢。
此建議適用於任何語言,但在PHP的情況下,您需要的分析器軟件被稱爲xDebug。
這是一個PHP擴展,所以你需要將它安裝到你的服務器。如果您在ISP的服務器上運行,那麼您可能沒有權限執行此操作,但您可以隨時在本地PC上使用PHP進行安裝,並在那裏運行測試。
一旦你安裝了xDebug,打開PHP.ini中的分析功能(請參閱xDebug文檔獲取相關說明),然後運行你的程序。然後它會生成分析器文件,這些文件可以用來分析程序正在做什麼。
下載KCacheGrind執行分析。這將生成調用樹信息,準確顯示程序運行時發生的情況以及每個函數調用花費的時間。
有了這些信息,您可以查找緩慢運行的函數調用,並計算出發生了什麼。通常,慢編碼的原因是寫某種東西時的某種低效率; xDebug將幫助你找到它。
希望有所幫助。
你有99%的概率,PHP不是問題。它相當於eshop網絡服務器或任何其他網絡延遲。
我知道這一點,因爲我已經這麼做了好幾個月了,即使你的代碼有很多正則表達式,數據抓取在PHP中也非常快。
解決方案加快這一點? 由於磁盤空間便宜,因此預先使用命令行抓取工具緩存所有網站。捲曲可以做到這一點,以及httrack。它將比PHP爬行更快更穩定。
然後讓PHP單獨做分析,你會看到希望PHP大嚼幾十頁每分鐘,希望這有助於:)
- 1. php頁面抓取任務
- 2. 抓取頁面更新後
- 3. Facebook頁面抓取
- 4. 抓取html頁面
- 5. HTML頁面抓取
- 6. 抓取頁面塊
- 7. php抓取頁面使用http post
- 8. 使用php抓取javascript頁面
- 9. Python抓取頁面源PHP中它
- 10. 抓取Google翻譯的頁面? (PHP)
- 11. PHP網頁抓取
- 12. 如何在Python中更快更高效地抓取多個頁面
- 13. backbone.js抓取頁面一次
- 14. Wordpress抓取頁面屬性
- 15. 可抓取的ajax頁面
- 16. 抓取Facebook粉絲頁面
- 17. PHP Laravel網頁抓取get_meta_tags
- 18. DOMDocument PHP網頁抓取
- 19. 在PHP中抓取網頁
- 20. 非常快速的網頁抓取(Python)
- 21. 更新viewstate網頁抓取
- 22. 如何加快用watir抓取動態頁面?
- 23. 從iframe頁面抓取網頁
- 24. scrapy回調抓取分頁頁面
- 25. Scrapy遞歸抓取無法抓取所有頁面
- 26. 用於網頁抓取的Customazible管理頁面(網頁界面)
- 27. jQuery或PHP腳本抓取頁面信息
- 28. 從頁面抓取網址php嵌入在
- 29. 通過jquery從php頁面抓取會話變量?
- 30. PHP CURL:在循環中抓取多個頁面
兩天似乎並不像它會是壞的時間量。 ..當你編寫替代解決方案時,它會完成。話雖如此,嘗試使用multi_curl功能進行並行請求。 – Lusitanian 2012-07-07 20:25:58