页面抓取速度更快[PHP]


Crawl page faster [PHP]

我有一个关于用PHP抓取网页的小问题。我必须在一个大的网店上抓取大约9万种产品。我在PHP中尝试过,但一个产品大约需要2-3秒,这很糟糕。有什么建议吗,如何做得更快?也许是C++多线程版本?但HTTP请求的时间呢?我的意思是,这是不是PHP的限制?谢谢你的建议。

这是一个极其模糊的问题。当您对现有代码进行基准测试时,最慢的部分是什么?是网络传输时间吗?使用不同的语言(或多个线程)不会改变这一点。

解析页面花了时间吗?你是怎么做到的?如果您使用XML库来解析整个DOM,那么您可以只查找关键字(甚至正则表达式)吗?这不太精确(在某种意义上也不太正确),但也许更快。

你的分析使用了什么算法?其他数据结构会提供更好的性能吗?举一个简单的例子,如果您花费大量时间在数组上迭代,那么散列映射可能更合适。

PHP可以在多个进程中运行。如果您同时启动脚本的多个实例(在不同的页面上),会发生什么?总时间减少了吗?

最终,您描述了一个非常普遍的问题,因此我无法提供非常具体的解决方案,但PHP不适合执行此任务并没有内在的原因。当你确定了什么是慢的(无论你使用的是什么语言),你应该能够更准确地解决它。

我不认为这是PHPs的问题,但这可能取决于连接速度/计算机速度。不过,我从来没有遇到过PHP/cURL的速度问题。

只需执行多个线程(即同时进行多个连接),我建议您使用cURL,但这只是因为我熟悉它。

以下是我使用cURL抓取多个线程的指南:http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading

要非常小心,不要意外地在脚本中造成拒绝服务的情况。但我相信你已经摆脱了这种可能性。

如果你的程序运行缓慢,我的建议是在它上运行一个探查器,并分析它运行缓慢的原因。

这个建议适用于任何语言,但在PHP的情况下,您需要的探查器软件称为xDebug。

这是一个PHP扩展,因此您需要将其安装到服务器中。如果你在ISP的服务器上运行,那么你可能没有这样做的权限,但你可以在本地电脑上用PHP安装它,并在那里运行测试。

安装了xDebug后,打开PHP.ini中的评测功能(有关此方面的说明,请参阅xDebug文档),然后运行程序。然后,它将生成探查器文件,这些文件可用于分析程序正在执行的操作。

下载KCacheGrind以执行分析。这将生成调用树信息,准确显示程序运行时发生的事情,以及每个函数调用所花费的时间。

有了这些信息,您可以查找运行缓慢的函数调用,并计算出发生了什么。通常,代码编写缓慢的原因是某种程度上的低效;xDebug将帮助您找到它。

希望能有所帮助。

您有99%的概率PHP不是问题。它更确切地说是eshop网络服务器或任何其他网络延迟。

我确信这一点,因为我已经做了几个月了,即使你的代码有很多正则表达式,PHP中的数据抓取也非常快。

加快这一速度的解决方案是什么使用命令行爬网程序预缓存所有网站,因为磁盘空间很便宜。curl可以做到这一点,httrack也可以。它将比PHP进行爬行更快、更稳定。

然后让PHP单独进行解析,你会看到PHP每分钟吃掉几十个页面,希望这有帮助:)