我有一个关于在PHP中抓取网页的小问题。我不得不在一个大的eshop上抓取大约90000个产品。我在PHP中尝试过,但一个产品需要2-3秒,这很糟糕。有什么建议吗,怎么做得更快?也许是C++多线程版本?但是HTTP请求的时间呢?我的意思是,它到底有没有PHP的限制?谢谢你的建议。
发布于 2012-07-08 04:25:36
这是一个非常模糊的问题。当您对已有的代码进行基准测试时,最慢的部分是什么?是网络传输时间吗?使用不同的语言(或多线程)不会改变这一点。
是解析页面所花费的时间吗?你是怎么做到的?如果您使用XML库来解析整个DOM,那么只查找关键字(甚至是正则表达式)就可以了吗?这不太精确(在某种意义上也不太准确),但它可能更快。
您在分析时使用了哪些算法?其他数据结构会提供更好的性能吗?举个简单的例子,如果你花了很多时间迭代一个数组,也许哈希映射更合适。
PHP可以在多个进程中运行。如果您一次启动脚本的多个实例(在不同的页面上),会发生什么?总时间会减少吗?
最终,您已经描述了一个非常普遍的问题,所以我不能提供非常具体的解决方案,但是PHP不适合这项任务没有内在的原因。当你已经确定了什么是慢的(不管你使用的是什么语言),你应该能够更准确地解决如何修复它。
发布于 2012-07-08 04:25:27
我不认为这是PHPs的问题,但这可能取决于连接速度/计算机速度。不过,我从来没有遇到过PHP/cURL的速度问题。
只需执行多个线程(即多个连接),我建议您使用cURL,但那只是因为我熟悉它。
下面是我使用cURL抓取多线程时使用的指南:http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading
请非常小心,不要意外地导致脚本出现拒绝服务的情况。但我相信你已经远离了这种可能性。
发布于 2012-07-08 04:34:15
如果你的程序运行缓慢,我的建议是在它上面运行一个分析器,并分析它运行缓慢的原因。
这个建议适用于任何语言,但是对于PHP语言,您需要的分析器软件称为xDebug。
这是一个PHP扩展,因此您需要将其安装到您的服务器中。如果你在ISP的服务器上运行,那么你可能没有权限这样做,但是你可以在你的本地PC上用PHP安装它并在那里运行你的测试。
安装了xDebug之后,打开PHP.ini中的性能分析特性(有关这方面的说明,请参阅xDebug文档),然后运行您的程序。然后,它将生成分析器文件,这些文件可用于分析程序正在执行的操作。
下载KCacheGrind以执行分析。这将生成调用树信息,显示程序运行时到底发生了什么,以及每个函数调用花费了多长时间。
有了这些信息,您可以查找运行缓慢的函数调用,并找出发生了什么。通常,代码慢的原因是编写代码的方式效率低下;xDebug将帮助您找到它。
希望这能有所帮助。
https://stackoverflow.com/questions/11378347
复制相似问题