我有一个关于在PHP中抓取网页的小问题。我必须在一家大型电子商店中抓取约9万种产品。我在PHP中尝试过它,但是一个产品大约需要2-3秒,这很糟糕。任何提示,如何更快地完成?也许是C ++多线程版本?但是HTTP请求的时间呢?我的意思是,是不是PHP的限制?感谢您的提示。
答案 0 :(得分:2)
这是一个非常模糊的问题。当您对代码进行基准测试时,最慢的部分是什么?是网络传输时间吗?使用不同的语言(或多个线程)不会改变它。
是否花时间解析页面?你是怎么做到的?如果您正在使用XML库来解析整个DOM,那么您是否可以通过寻找关键字(甚至是正则表达式)来逃避?这不太精确(在某种意义上说不太正确),但也许它更快。
您使用哪种算法进行分析?其他数据结构会提供更好的性能吗?举个简单的例子,如果你花费大量时间迭代数组,也许哈希映射更合适。
PHP可以在多个进程中运行。如果您一次启动脚本的多个实例(在不同的页面上)会发生什么?总时间会减少吗?
最终你已经描述了一个非常普遍的问题,所以我不能提供非常具体的解决方案,但没有固有的理由说明PHP不适合这项任务。当你发现什么是慢的(无论你使用什么语言),你应该能够更准确地解决如何解决它。
答案 1 :(得分:1)
我不认为这是PHP的问题,但它可能取决于连接速度/计算机速度。我从来没有遇到PHP / cURL的速度问题。
只做多个线程(即一次多个连接),我建议你使用cURL但这只是因为我对它很熟悉。
这是我用于多个线程的指南,用于使用cURL进行抓取: http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading
请务必小心不要在脚本中意外导致拒绝服务。但我相信你已经远离了这种可能性。
答案 2 :(得分:0)
如果您的程序运行缓慢,我的建议是在其上运行一个分析器,并分析它运行缓慢的原因。
此建议适用于任何语言,但对于PHP,您需要的探查器软件称为xDebug。
这是一个PHP扩展,因此您需要将其安装到您的服务器中。如果您在ISP的服务器上运行,那么您可能没有权限这样做,但您可以随时在本地PC上安装PHP并在那里运行测试。
安装xDebug后,打开PHP.ini中的性能分析功能(有关此说明,请参阅xDebug文档),然后运行程序。然后它将生成探查器文件,可用于分析程序正在执行的操作。
下载KCacheGrind以执行分析。这将生成调用树信息,准确显示程序运行时发生的情况,以及每个函数调用花费的时间。
通过这些信息,您可以查找运行缓慢的函数调用,并找出正在发生的事情。通常,代码缓慢的原因是某些东西被写入的效率低下; xDebug将帮助您找到它。
希望有所帮助。
答案 3 :(得分:0)
你有99%的可能性 PHP不是问题。它更像是eshop网络服务器或任何其他网络延迟。
我肯定知道这一点,因为我已经做了好几个月了,即使你的代码有很多正则表达式,数据抓取在PHP中也很快。
加速这个的解决方案? 使用命令行搜寻器预先缓存所有网站,因为磁盘空间很便宜。 curl可以做到这一点,httrack也是如此。它将比PHP执行爬行更加快速和稳定。
然后让PHP单独进行解析,你会看到PHP每分钟咀嚼几十页,希望这会有所帮助:)