首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更快地抓取页面[PHP]

更快地抓取页面[PHP]
EN

Stack Overflow用户
提问于 2012-07-08 04:20:58
回答 4查看 2.3K关注 0票数 2

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

EN

回答 4

Stack Overflow用户

发布于 2012-07-08 04:25:36

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

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

您在分析时使用了哪些算法?其他数据结构会提供更好的性能吗?举个简单的例子,如果你花了很多时间迭代一个数组,也许哈希映射更合适。

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

最终,您已经描述了一个非常普遍的问题,所以我不能提供非常具体的解决方案,但是PHP不适合这项任务没有内在的原因。当你已经确定了什么是慢的(不管你使用的是什么语言),你应该能够更准确地解决如何修复它。

票数 2
EN

Stack Overflow用户

发布于 2012-07-08 04:25:27

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

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

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

请非常小心,不要意外地导致脚本出现拒绝服务的情况。但我相信你已经远离了这种可能性。

票数 1
EN

Stack Overflow用户

发布于 2012-07-08 04:34:15

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

这个建议适用于任何语言,但是对于PHP语言,您需要的分析器软件称为xDebug

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

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

下载KCacheGrind以执行分析。这将生成调用树信息,显示程序运行时到底发生了什么,以及每个函数调用花费了多长时间。

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

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11378347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档