如何为网络爬虫设置有效的 cron 作业

Posted

技术标签:

【中文标题】如何为网络爬虫设置有效的 cron 作业【英文标题】:How to set up effective cron jobs for a web crawler 【发布时间】:2012-09-18 07:10:18 【问题描述】:

我已经编写了一个 php 网络爬虫来索引仅 180 个特定来源的内容,但是每页平均需要 2 秒来分析、抓取和保存我想要的内容:图片、网址、标题、完整内容、摘录, 标签。 (有几种算法可以分析所有元标记以获取正确的数据)

我只抓取最新的 9 篇文章页面,因此每个来源大约需要 18-25 秒。

我创建了 10 个不同的 cron 作业(它们之间的时间为 6 分钟),因此每个作业可以处理 18 个源(大约 350 秒)。

这似乎非常低效,特别是如果我想达到 1k 个来源。我应该修改什么?

ps:我在共享主机上测试它,专用服务器会大大减少时间吗?

cron 工作类似于:

lynx -auth 用户名:密码 website.com/crawler.php?group=1

lynx -auth 用户名:密码 website.com/crawler.php?group=2

lynx -auth 用户名:密码 website.com/crawler.php?group=3 等等

爬虫脚本从数据库中访问18个来源,获取最新的9篇文章页面并爬取内容,分析并根据结果将其存储在数据库中。

【问题讨论】:

您的服务器在 cron-job 运行期间是否得到充分利用?让它们并行运行会不会很痛苦?如果您将爬行和索引分开,也许您可​​以加快速度。 wget 爬行速度非常快。让它完成它的工作并使用您的 php 脚本索引下载的文件。 如果你可以直接运行 crawler.php 脚本,而不需要 webserver 和 lynx,效率会更高。 我该怎么做.. 创建守护进程会更好吗?正如大人所说的那样? 您需要能够直接从命令行运行 php 脚本。如果在您的共享服务器中不可能,您需要一台专用机器(或具有 root 访问权限的虚拟机)。如果您使用守护程序或 cron-job 对效率没有影响。您需要确保任务本身尽可能高效。从命令行或在 cronjob 中运行脚本就像 /usr/bin/php /path/to/crawlscript.php arg1 arg2 argN 一样简单 所以基本上我需要修改算法,这是主要问题吗?以及为什么命令行比 cpanel cron 作业快 【参考方案1】:

老实说,不要为此使用 cron 作业。设置一个守护进程,它将一直运行。如果它崩溃等重生。

http://pear.php.net/package/System_Daemon

【讨论】:

以上是关于如何为网络爬虫设置有效的 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

如何为服务器上的 codeigniter 脚本设置 cron 作业

网络爬虫作业代码代写代实现代做爬虫程序

爬虫技术—内功修炼之网络爬虫概念作用分类

网络爬虫之网页排重:语义指纹

如何用PHP做网络爬虫

爬虫技术是做啥的