【问题标题】:Use of CakePHP's HttpSocket or PHP's cURL to crawl several sites from a search page使用 CakePHP 的 HttpSocket 或 PHP 的 cURL 从一个搜索页面爬取多个站点
【发布时间】:2014-01-09 14:55:00
【问题描述】:

我将使用 CakePHP 构建一个允许用户搜索关键字的应用程序,即。牛奶,然后我会自动搜索本地在线商店以获取牛奶的最佳价格,即。 walmart、shaws、stop&shop 等(注意:这是一个假设的情况,举例说明我需要完成的事情),然后我会将结果显示给用户。

我想利用 CakePHP 的 HttpSocket 库而不是 cURL 来完成这项工作。

我需要将此设置设置为多线程,这样我才能更快地显示结果,但为了性能起见,进行这些调用的最佳位置是哪里,即控制器?基本上,考虑到它需要多线程且速度快,我正在寻找您对实现此类工作的最佳方法的见解。

我之前没有使用过 CakePHP 的 HttpSocket 库,但是我看过并快速测试了它,它似乎非常强大。你对此有何看法?它是否在性能方面与 PHP 的 cURL 进行比较?

非常感谢您的洞察力。

【问题讨论】:

  • 仅供参考:cURL 绝不是多线程的……它可以是非阻塞的,但不能是多线程的。
  • cURL 多手柄怎么样?这可以被认为是多线程的吗? php.net/manual/en/function.curl-multi-init.php
  • "in no way" 是一种非常明确的语言...我没有更明确的方式来表达它,但会再试一次...cURL 在 no way i> 多线程,curl 多接口是非阻塞的,不是多线程的 ...

标签: php cakephp curl web-scraping web-crawler


【解决方案1】:

cURL 比任何普通的 php 实现都快,比如 CakePHP 套接字。

控制器是错误的位置,模型或自定义数据源将是正确的位置。您可以同时请求多个站点并等待 X 秒,直到您取消未及时响应的请求。另外我会缓存结果,这样您就不必每次都要求价格。

根据价格变化的频率,最好每天或每小时查询所有商店一到两次,例如使用 shell 并更新数据库中的价格。

【讨论】:

  • 自定义数据源无疑是一种很好的方法,我没有考虑过。我一定会采用这种方法并为这个项目实施它。我想避免使用数据库,尽管我同意这是一个更好的主意,主要是因为可用的产品数量众多。但是,我可能会采纳您的建议,并在需要时在使用数据库进行爬取的基础上开发一个数据库系统。感谢您的帮助!
猜你喜欢
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多