w3mで、LPI Japan が公開している例題をローカルに保存する。

※「wget -r」で充分です。。。w

作業は「debian」上で行ないますw。まあ、linuxならどれでも。。。

1.トップページがどんなURLを使用しているかは分からなくても構いません。
下記のように適当なhtml形式で保存します。

$ w3m -dump_both http://www.lpi.or.jp/ex/ > ex.html

2.タグを改行に変換して、引っ掛けると、以下のようになります。

$ cat ex.html | sed s/"<"/\\n/g | sed s/">"/\\n/g | grep "ex\/[1-3]" | awk -F\" '{print $2}' | column
/ex/101/ /ex/301/ /ex/101/ /ex/301/
/ex/102/ /ex/302/ /ex/102/ /ex/302/
/ex/201/ /ex/303/ /ex/201/ /ex/303/
/ex/202/ /ex/304/ /ex/202/ /ex/304/


3.ループに渡してまとめて保存します。

$ echo '/ex/101/
/ex/102/
/ex/201/
/ex/202/
/ex/301/
/ex/302/
/ex/303/
/ex/304/
/ex/101/
/ex/102/
/ex/201/
/ex/202/
/ex/301/
/ex/302/
/ex/303/
/ex/304/
' | for list in `xargs`;do \
w3m -dump_both "http://www.lpi.or.jp${list}" > $(echo ${list} | awk -F\/ '{print $3}').html; \
done

4.shtmlの名前がキレイにそろっていて、「detail_」で始まることが分かります。

$ for list in [1-3]*.html;do \
cat ${list} | sed s/"<"/\\n/g | sed s/">"/\\n/g | grep href | grep detail | awk -F\" '{print $2}'; \
done

5.shtml形式のまま保存します。

$ for list in [1-3]*.html;do \
cat ${list} | sed s/"<"/\\n/g | sed s/">"/\\n/g | grep href | grep detail | awk -F\" '{print $2}'; \
done | for next in `xargs`;do \
w3m -dump_both ${next} > $(echo ${next} | awk -F/ '{print $5 "_" $6}'); \
done


5.テキスト形式に変換します。

$ for list in *detail*;do \
w3m ${list} > $(echo ${list} | sed s/"\.shtml"/"\.txt"/g); \
done

6.ログ形式として課題別に保存します。

$ for list in [1-3]*detail*.txt;do \
cat ${list} >> $(echo ${list} | awk -F_ '{print $1}').log; \
done

7.すると以下のようになります。

$ ls *.log
101.log 102.log 201.log 202.log 301.log 302.log 303.log 304.log

8.「101」が充実、「304」の情報が少ないことも併せて読み取れます。

$ for list in *.log ;do wc -l ${list};done
11759 101.log
10005 102.log
7223 201.log
8317 202.log
4094 301.log
2866 302.log
6119 303.log
881 304.log

以上です。