2012-07-07 67 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大嚼几十页每分钟,希望这有助于:)