So-net無料ブログ作成
検索選択

sitemap.xmlの簡単なスクレイピング [Linux]

Bash on WindowsでCreators Updateを入れずに16.04にしようと、do-release-upgradeをしたけど途中で落ちたw。というか、落とすなら初めから入れておくなよと思ってしまうのだけれど…。そんなわけでCreators Updateが本採用されるまでは新しいLTSなAPTを使えませんね。

wget -rでやたら時間がかかるので、Sitemap.xmlを加工して効率的にやりたいなと思ったわけで。こんな事が通じるのはレアケースなんだけど、Sitemap.xmlに出てくるURLを加工して独立したページを取得した方が速いのかなと。というかwgetでも辿り着けるんだけど、随分と時間がかかってしまっていたので、途中で止めました。だってスリープとかしていたにしても2日間ずっと落としていたのにまだ終わらなかったんですよ。まぁwgetは一つのスレッドでしか動いていないと思うので、ダウンロードも単一ファイルしか落とせないだろうし、ある程度の遅さは自動的に走らせてほっとくことによって楽する方向で。

そんなわけでスクレイピングを行いたいと思います。XMLのスクレイピングならちょっと前にやったGolangのgoqueryとかでいいじゃねぇかと言われればそうです。別に他のものに手を出す必要はないのですが、awkを使ってみたい気持ちは前々からあって、結果的にできていなかった状態だったのでした。そんなわけで、テキスト加工ならAWKでしょという事に相成りました。

でも、正直awkがどういう加工に特化しているのか全然知らなかったりします。ましてやスクレイピングに使えるかどうかというのがよく分かっていない。awkでスクレイピングを探していたら結局xmllintというツールを別に使う事になりそうだとわかりました。でもBash on Windowsには入っていなかった。

$xmllint
プログラム 'xmllint' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt-get install libxml2-utils

入れないとダメかぁ。あんまり使わないツールとか入れたくないんだよなぁ。本物のUnuntu Serverには入っていたのでそっちでやることにする。xpathの書き方はよく分からないけど、階層順に//の後に/でタグを並べればいいらしい。XMLの階層はHTMLほどめちゃくちゃじゃないから

たぶん下のようなコマンドで
xmllint --xpath "//urlset/url/loc" Sitemap.xml

<loc>http://www.ほげほげ.com/a.html</loc>
みたいなのがずらずらと取れる。ただエラーもたくさん吐き出されていた。でも、ファイルにリダイレクトしてあげたので気にしない。データを取れたんだけど、区切り文字を入れていないのでたくさん取れても単独で取れない。面倒なのでエディタの機能で</loc><loc>を改行で置換した。

後の加工も同じような置換作業でコマンドを加工した。本当はLinuxのコマンドで加工したところだけど、考えるのが面倒なので挿入するコマンドのパラメーターに注力した。やっぱAWKとかsedとか本気でかじっとくかなぁ。まだまだ知らないことは多い。面倒くさくてやっていないことも多い。

コメント(0) 

Twitterまとめ投稿 2017/06/13 [Twitter]


コメント(0)