【问题标题】:Writing a PHP web crawler using cron使用 cron 编写 PHP 网络爬虫
【发布时间】:2011-06-07 07:14:47
【问题描述】:

我已经使用 simplehtmldom 为自己编写了一个网络爬虫,并且让爬取过程运行得非常好。它爬取起始页面,将所有链接添加到数据库表中,设置会话指针,然后元刷新页面以进入下一页。一直持续到链接用完

这很好用,但显然大型网站的抓取时间相当乏味。不过,我希望能够加快速度,并可能使其成为一项 cron 工作。

除了将内存限制/执行时间设置得更高之外,还有什么让它尽可能快速和高效的想法吗?

【问题讨论】:

  • 在 SO 或 Google 中搜索 php profiler。您可以准确地确定是什么让一切都变慢了。从那里,您可以提出更具体的问题,例如“如何加快 file_get_contents()”。
  • 我将在我/我的公司建立的网站上使用它,仅用于检查死链接,并检查所有链接是否有合适的锚点 + 标题,确保所有页面都有标题/h1 标签等跨度>

标签: php regex web-crawler hyperlink


【解决方案1】:

看起来您正在网络浏览器中运行脚本。您可以考虑从命令行运行它。您可以执行多个脚本同时爬取不同的页面。那应该加快速度。

【讨论】:

  • 他说他想把它变成一个cronjob,所以我想他已经把它写成一个命令行脚本了。
【解决方案2】:

对于爬虫来说,内存一定不是问题。

完成一页并将所有相关数据写入数据库后,您应该删除为此作业创建的所有变量。

100页后的内存使用必须与1页后相同。如果不是这种情况,请找出原因。

您可以在不同进程之间拆分工作:通常解析页面不需要加载它,因此您可以将找到的所有链接写入数据库,并有多个其他进程只需将文档下载到临时目录。 如果你这样做,你必须确保

  1. 没有链接下载到工作人员。
  2. 如果没有新链接,您的进程会等待。
  3. 每次扫描后都会删除临时文件。
  4. 当您用完链接时下载过程停止。您可以通过设置“终止标志”来归档它,它可以是具有特殊名称的文件或数据库中的条目。

【讨论】:

  • 我认为我已经编写了一个相当紧凑的过程,尽管可以对数据库交互进行一些改进。我唯一不确定的是如何在不重叠 cronjobs 的情况下使其成为 cron。显然,页面越大,需要进行的处理就越多,所以我不确定如何在作业中适应一定数量的进程实例,而不会浪费时间不处理,或者时间呈指数级重叠
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多