Functionノードを使わないでスクレイピングに挑戦します。
@n0bisuke さんのNodeREDでみんな大好きIGRの時刻表をスクレイピングのインスパイア記事です。
作ったフロー
injectノード(タイムスタンプ)
特にプロパティは変更していないです。
フローを発火します。
httpノード(滝沢駅)
URLに以下を入力します。
https://igr.jp/station/takizawa
HTMLノード(上り/下り)
Httpノードで取得したHTMLをHTMLノードで必要な箇所のみ抽出します。
抽出する要素は以下の様に指定します。
上り
#igr-eki-diaup > div > div:nth-child(1) > table > tbody > tr
下り
#igr-eki-diadown > div > div:nth-child(1) > table > tbody > tr
得られたテキストデータ
Changeノード(Trim)
抽出で得られたテキストデータには、複数の改行コードが含まれています。Changeノードでトリムします。さらに、msg.topicに上りのデータか下りのデータか名前を付けておきます。
上り
下り
得られたテキストデータ
トリムされて、データとデータの間にはスペースになっています。
例)
CSVノード
CSVノードのプロパティは区切り文字を空白にします。
出力されたデータは配列にしておきます。
Changeノード(整形)
上りか下りかの情報をJSONデータに含めたいので、Changeノードで整形します。
debugノード
特にプロパティは変更していないです。
フローの実行結果
{"title":"滝沢駅上り","items":[{"時刻":"6:16","行先":"盛岡","のりば":3},{"時刻":"6:46","行先":"矢幅※","のりば":3,"記事":"JR東北本線直通"},{"時刻":"7:09","行先":"盛岡","のりば":3},{"時刻":"7:21","行先":"日詰","のりば":3,"記事":"JR花輪線から東北本線直通"},{"時刻":"7:32","行先":"北上","のりば":3,"記事":"JR東北本線直通"},{"時刻":"7:42","行先":"盛岡","のりば":3},{"時刻":"7:50","行先":"日詰","のりば":2,"記事":"JR東北本線直通"},{"時刻":"8:01","行先":"盛岡","のりば":3,"記事":"JR花輪線から"},{"時刻":"8:18","行先":"盛岡","のりば":2},{"時刻":"8:35","行先":"盛岡","のりば":2},{"時刻":"8:45","行先":"盛岡","のりば":3},{"時刻":"9:08","行先":"盛岡","のりば":3,"記事":"土休日運休"},{"時刻":"9:23","行先":"盛岡","のりば":3,"記事":"JR花輪線から"},{"時刻":"9:43","行先":"盛岡","のりば":3},{"時刻":"9:53","行先":"北上","のりば":2,"記事":"JR東北本線直通"},{"時刻":"10:10","行先":"盛岡","のりば":3},{"時刻":"11:03","行先":"盛岡","のりば":3},{"時刻":"11:32","行先":"盛岡","のりば":3},{"時刻":"12:24","行先":"盛岡","のりば":3,"記事":"JR花輪線から"},{"時刻":"12:43","行先":"盛岡","のりば":3},{"時刻":"13:03","行先":"盛岡","のりば":2}]}
まとめ
functionノードを使わなくても、時刻表データをJSON形式にできました。