让我解释一下我的情况。
我有一个1000万页面网址列表。我希望这些页面被抓取并以原始html格式保存在数据库中。
截至目前,我正在使用CURL来删除这些页面。每次访问index.php
时,它都会丢弃一个页面URL并将其保存在数据库中。
现在我认为自己无法使用浏览器访问index.php
1000万次。
我可以使用do while loop
。但我认为它将花费一些时间完成任务。还有记忆问题。
所以有人能指出我正确的方向让这项任务变得无痛。
我拥有一个带有1GB RAM
和WHM / cPanel的Linux VPS服务器。
1440 urls in 24 hours
。那么有人可以给我一些想法,使用cron在一天内完成atleast 100,000
网址。
答案 0 :(得分:4)
您需要的是一些高速抓取库,例如wget
或curl
来为您完成繁重的工作。 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脚本。这样您就可以指定每个文件的确切目标。
答案 1 :(得分:3)
我希望你有一个很好的宽带计划! =)
使用cron
的简单答案是运行一个擦除至少70个URL的shell脚本。这符合你每天至少10万的目标(如果cron每分钟发射一次)。
wget
命令可能就是你想要的,用于检索页面。
我还建议你有另一个进程可以在不太频繁的时间范围内解析IP地址。每次访问页面时,您都不希望进行名称查找。如果你给它一个IP地址,wget
会更开心。
[编辑]然而,只是一个想法。如果按顺序执行,不太可能在不到一秒的时间内刮掉每一页。因此,您可能希望为每个URL分叉一个新进程。这可能就像使用&
咒语上的wget
来完成工作一样简单。为了提供某种理智,可以一次产生10批,然后再睡5秒钟。