2008年8月8日 星期五

如何整批抓取網路上的檔案 !

我們以下面這個網址為例, 來整批抓取全部的MAME ROMS :
http://www.rom-world.com/dl.php?name=MAME

我們使用Active Perl, 來寫一支Perl程式, 整批抓取全部的MAME ROMs,
首先我們要找出規則, 這部份我就省略了, 我直接列出我的Perl程式碼, 如下 :

use LWP::Simple;

@pages = ('0-9','A' .. 'Z');
$base_url1 = 'http://www.rom-world.com/dl.php?name=MAME&letter=';
$base_url2 = 'http://server2.rom-world.com/check/getfile.php?id=';
foreach $p (@pages) {
my $content = get $base_url1.$p;
@lines = split(/\n/, $content);
$count = 0;
foreach $l (@lines) {
$pos = index($l, "id=");
if ($pos > 0) {
$count++;
$start_pos = $pos + 3;
$ss = substr($l, $start_pos);
$len = index($ss, ">");
$id = substr($l, $start_pos, $len);
#print $id."\n";
print "wget "."http://server2.rom-world.com/check/getfile.php?id=".$id."\n";
}
}

#print "Label=".$p.", count=".$count."\n\n";
}

最後啟用命令提示字元, 輸入命令如下 :
cd \
mkdir roms
cd roms

然後將上面的程式存檔為 getdata.pl, 並存放在roms目錄中
另外再下載wget.exe, 也存放在roms目錄中

然後在命令提示字元中, 輸入
perl getdata.pl > get_allroms.bat

最後在roms目錄中, 就會產生一個新檔, 檔名為 get_allroms.bat, 然後在命令提示字元中, 輸入
get_allroms.bat

這樣就會將所有ROMs檔案, 全部下載到roms目錄中 !

PS : 後來發現該網站有限制 - 一天只能下載100個檔案, 所以get_allroms.bat就要修改一下 !

0 意見: