コマンドラインからスクレイピングする方法

Wikipediaの「猫の品種の一覧」ページから「猫の品種」HTMLテーブルをスクレイピングして取得、CSV変換して必要なデータをフィルタする例。

$ curl -s "https://ja.wikipedia.org/wiki/%E7%8C%AB%E3%81%AE%E5%93%81%E7%A8%AE%E3%81%AE%E4%B8%80%E8%A6%A7" \
> | hxnormalize -x \
> | hxselect 'table.wikitable' \
> | w3m -dump -cols 2000 -T 'text/html' \
> | sed -e 's/^\s\+//;s/ \+/,/g' \
> | csvcut -c 1,2,6 \
> | head
種類,原産国,毛色および模様
アビシニアン,エチオピアの旗エチオピア,複色
アメリカンカール,アメリカ合衆国の旗アメリカ合衆国,単色
アメリカンショートヘア,アメリカ合衆国の旗アメリカ合衆国,All
アメリカンボブテイル,アメリカ合衆国の旗アメリカ合衆国,All
アメリカンワイヤーヘア,アメリカ合衆国の旗アメリカ合衆国,All
エキゾチックショートヘア(英語版),アメリカ合衆国の旗アメリカ合衆国,All
エジプシャンマウ,エジプトの旗エジプト,ぶち
オシキャット,アメリカ合衆国の旗アメリカ合衆国,Spotted
オホースアズーレス(英語版),アメリカ合衆国の旗アメリカ合衆国,All

説明

  1. curl: HTML取得
  2. hxnormalize: HTML正規化
  3. hxselect: <table class="wikitable" を抽出
  4. w3m: HTMLをフォーマットしてテキスト表示
  5. sed: 行頭空白文字をトリムして、2つ以上の連続する半角スペースをカンマに置換してCSVデータに変換
  6. csvcut: CSVデータの1,2,6列目を取得
  7. head: 先頭10行を表示