iMacrosでNavitimeのデータをクローリングしてみた
仕事で必要に迫られて一からググって作ったのでまあまあボロボロですが、未来の自分が改良したものを作ってくれると思いますので貼っときます。
iMacrossとは?
→choromeのアドオンで、ブラウザ上での行動を自動化できる優れものなのだ
ポイントサイトの動きとかも自動化できるので、1回プログラムを起動したら後は出かけてても、勝手にやってくれるのだ。
内容
VERSION BUILD=844 RECORDER=CR
TAB T=1
SET !LOOP 2
SET !EXTRACT_TEST_POPUP NO
TAG POS=1 TYPE=div ATTR=id:spot_list EXTRACT=TXT
SAVEAS TYPE=EXTRACT FOLDER=* FILE=*
TAG POS=1 TYPE=A ATTR=HREF:https://www.navitime.co.jp/category/hogehoge/?page={{!LOOP}}
WAIT SECONDS=5
3行目
SET !LOOP 2
は、その下に出てくる
{{!LOOP}}
とセットで使う。!LOOP 2で始めたので、次のループは!LOOP 3になる。
この!LOOPの直後の数値が下に出てくるURLで使われている{{!LOOP}}に代入されるイメージだ。
この場合だとループするごとにページ送りのリンクで2ページ目、3ページ目・・・と順に次のページをめくってくれる処理になっている。
4行目
SET !EXTRACT_TEST_POPUP NO
これは長いデータになってしまうので「これ保存していいの?」と毎度聞かれてしまうことを防ぐ処理になっている。
5行目
TYPE=div ATTR=id:spot_list
これはnavitimeのページ内のどのデータを参照するかを指定する処理だ。
HTMLのタグで指定できるぞ!ただしclassは使えないのだ。(これが結構不便なの)
chromeであれば、指定したい要素の上で右クリック、「検証」を見ることでその部分のHTMLソースを確認することができる。
6行目
FOLDER=* FILE=*
この行は選択した内容をファイルに保存するという処理。FOLDERがどのフォルダーに保存するか。FILEがファイル名だ。
7行目
TAG POS=1 TYPE=A ATTR=HREF:https://www.navitime.co.jp/category/hogehoge/?page={{!LOOP}}
「このリンクをクリックするよ!」とう処理だ。上で説明した通り、ページ送りをするための処理になっている。ナビタイムの場合、施設ごとのジャンルでURL内のhogehogeの数値が変わるっぽい。
8行目
WAIT SECONDS=5
5秒待つという処理。読み込みを待つためです。他に書き方あったら教えてください。
問題点
この処理だと、1つのセルに1回ごとの参照内容が全て入ってしまい、ナビタイムの場合1ページに20個くらい施設が出るので、それぞれを分けてやらないといけない作業が発生する
私の場合、csvをテキストエディターで開いて、それをwordにコピペし、word上で置換をつかって改行を削除したり、エクセルに戻してこれまた置換を利用して特定の文字列の前に;(セミコロン)を入れ、「区切り位置」機能で別々のセルに分けるなどした。
これがまあまあめんどいので、次の課題としたい。