Problem
大学のサーバ上のneko.html
にリンクが張られてる書類をwgetで一括でダウンロードしようとしたかった
<http server>
- <nyaan>
- neko.html(ここに<meow>以下のファイルの相対リンクが説明文とともにリストされている)
- <meow>
- cat1.pdf
- cat2.pdf
- ...
- ...
- ...
以下のようにしたらneko.html
とrobot.txt
しかダウンロードされなかった.
wget -r http://<nyaan>/neko.html
Solution
以下のようにしたら解決した
wget -r -F -B http://<nyaan>/ -i http://<nyaan>/neko.html
-
-F <=> force-html
:-
-i
で指定するfileをHTMLとして認識させ<a>
で指定されたURLをたどる
-
-
-B URL <=> --base=URL
- 相対リンクのベースを指定する.
- e.g.
-F -i neko.html
としたときneko.html
がhttp://<nyaan>
以下にある想定で相対リンクが書かれている場合, - 参考: このブログの応用5 (ブログタイトルが参照禁止っていう名前だけどこういう参照もだめだったかな)
-
-i file <=> --input-file=file
- [単独]ダウンロードしたいファイルのURLのリストを記述したファイルを指定する.
- [w/
-F
] ダウンロードしたいファイルのURLを<a>
タグでふくんだHTMLを指定 - このオプション指定時にはWGET自体のコマンドライン引数は必要ない
-L
とか態々相対リンクだけたどるオプションもあるし,元々相対リンクもたどってくれそうだけど何故?
index.html
じゃなかったからかなとも思ったけどよくわかってない.調べる気になったら調べて追記.
Postscript
-
-i
の指定URLがリモートの場合,デフォルトでHTMLとして解析してくれる. - また
-B
も指定されなければ,-i
で指定したところをベースに相対リンクを追ってくれる. -
-i
はそもそもその指定ファイルに<a>
で示されているURLをたどろうとするため,今回のように指定ファイルに欲しいファイルがすべてリストされている場合-r
もいらない -
-i
で指定したファイルもダウンロードしてくれるっぽい
したがって,
wget -i http://<nyaan>/neko.html
でOK.
ただし最初のトライ(-r
オプションのみ)がだめなのが今なお謎.
neko.htmlの中身
大学の当該の書類をリストしているページの中身は多少改変しているがミスも含めて大体以下.質素というよりなんかかなりお粗末.そのせい?
<HTML>
<HEAD>
<TITLE> neko </TITLE>
</HEAD>
<body>
<CENTER>
<H2>neko</H2>
</CENTER>
<br>
<h3>neko document</h3>
<UL>
<LI>cat1: <a href="meow/cat1.pdf" target="_blank">PDF</a>
<LI>cat2: <a href="meow/cat2.pdf" target="_blank">PDF</a>
</UL>
<br>
</BODY>
</HTML>