2

让我解释一下我的情况。

我有一个包含 1000 万个页面网址的列表。我希望将这些页面作为原始 html 抓取并保存在数据库中。

截至目前,我正在使用 CURL 来废弃这些页面。每次我访问index.php时,它都会删除一个页面 url 并将其保存在数据库中。

现在我认为自己使用浏览器不可能访问那index.php1000 万次。

我可以使用do while loop. 但我认为完成任务需要很长时间。还有内存问题。

所以有人能指出我正确的方向,使这项任务变得轻松。

我拥有一个带有1GB RAMWHM/cPanel 的 Linux VPS 服务器。

PS:我考虑过 CRON。但我必须在 cron 中定义时间。即使我使用 cron 每 1 分钟运行一次脚本,我也只能完成1440 urls in 24 hours. 那么有人可以给我一些想法来atleast 100,000使用 cron 在一天内完成 url 吗?

4

2 回答 2

4

您需要的是一些高速获取库,例如wgetcurl为您完成繁重的工作。PHP 可以为这些程序创建要处理的工作列表,wget特别是可以选择从文件中给定的列表中获取和保存 URL 的内容。

从浏览器运行的 PHP 脚本必须在合理的时间内完成,否则会超时。它通常不用于这样的后台进程。

您可以使用它crontab来检查新工作并启动新wget流程。您没有理由一次只需要获取一个 URL。您可以在列出的文件中执行尽可能多的操作。

例如,一个 cron 作业可以启动如下脚本:

#!/bin/sh

for list in "/tmp/*.urls"
do
  wget -i $list -b
end

当然,有很多选项wget可以调整。

如果您确定您的 PHP 应用程序是安全的,您甚至可以写出cron稍后在后台运行的 shell 脚本。这样您就可以指定每个文件的确切目的地。

于 2013-05-03T03:51:59.533 回答
3

希望你有一个好的宽带计划!=)

使用的简单答案cron是运行一个抓取至少 70 个 URL 的 shell 脚本。这满足了您每天至少 100,000 次的目标(如果 cron 每分钟触发一次)。

wget命令可能是您想要的,用于检索页面。

我还建议您使用另一个进程在不太频繁的时间范围内解析 IP 地址。您真的不想在每次访问页面时都进行名称查找。 wget如果你给它一个IP地址会更开心。

[编辑] 然而,只是一个想法。如果按顺序进行,则不太可能在一秒钟内刮掉每一页。因此,您可能希望为每个 URL 派生一个新进程。这可以像使用咒语&上的来作为背景工作一样简单。wget为了提供某种理智,可能一次产生一批 10 个,然后休眠 5 秒。

于 2013-05-03T03:43:29.710 回答