我有一个关于在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