如何为网络爬虫设置有效的 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 作业的主要内容,如果未能解决你的问题,请参考以下文章