Closed5
娘の幼稚園ブログをVim+シェルワンライナーの練習を兼ねてスクレイピング
いつもはLambdaを使ってスクレイピングしているのだが、訳あってスポット対応する必要があり、せっかくなので練習中のvim、Linuxワンライナーを試してみる。
- (認証付きなので)ブログに手動アクセスしてSourceをローカルに保存
- Vimを使って写真一覧のURLを抽出(正規表現検索+マクロ)
- URL一覧からワンライナーで写真をローカル保存(xargs + curl)
正直2.もシェルコマンドを使って行えば良いとは思うが、そこはまあ練習なので。。。
(ToDo: 後で別解として自分でやってみる)
正規表現
DLしたい写真がhref="https://(domain)~jpeg"
の形式でソース中に並んでいるので正規表現で抽出できる。
vimの正規表現検索で気をつけたところ
-
\v
でvery magic検索を使う - very magic検索を使ったときにエスケープが必要な文字が何かは手探りで
-
.
はそうだろうなと思ったけど、=
もエスケープが必要なんやね
-
-
*
は最長マッチなので、同一行に複数URLがあるようなケースでは{-}
を使って最短マッチ検索することが必要 - マッチさせたい位置をコントロールするために適宜
\zs
、\ze
を使う
最終的には次のようになった
/\vhref\="\zshttps:\/\/www\.(domain).{-}jpeg
マクロ
検索した結果を全てヤンクするようなことができそうなもんだが、その方法に辿り着けなかった。
ということで、次のマッチ→""の中をヤンク→別タブのファイルに貼り付け→元のタブに戻るをマクロに登録し、ファイルの先頭から最後まで繰り返し実施することにした。
留意事項:
-
set nowrapscan
して、ファイルの先頭に戻らないようにしておく - 先に別タブを用意しておく
- はりつけには
p
ではなく:put
を使う。改行がされるため。
nyi":tabn
:put
:tabn
ワンライナー
ここまでで取得したいURLが各行に並んだテキストファイルが出来上がるので、それを読み込んでcurlを実行すれば良い
cat links.txt | xargs -n1 curl -O
ポイント:
- xargsに
-n1
を設定することで各行に対して実行の意味合いになる - curlの
-o
と-O
は意味合いが違うので注意。後者だと取得したファイル名を使ってローカルに保存する
このスクラップは2023/09/24にクローズされました