IGRの時刻表をスクレイピング

Functionノードを使わないでスクレイピングに挑戦します。

@n0bisuke さんのNodeREDで[みんな大好きIGRの時刻表をスクレイピング](https://qiita.com/n0bisuke/items/bd5329296fc188199993)のインスパイア記事です。


## 作ったフロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/0af95753-8b30-c315-7dc0-87035e7a19c5.png)

### injectノード（タイムスタンプ）
特にプロパティは変更していないです。
フローを発火します。

### httpノード（滝沢駅）
URLに以下を入力します。
https://igr.jp/station/takizawa


### HTMLノード（上り／下り）
Httpノードで取得したHTMLをHTMLノードで必要な箇所のみ抽出します。
抽出する要素は以下の様に指定します。

#### 上り
`#igr-eki-diaup > div > div:nth-child(1) > table > tbody > tr`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/44553661-bdfe-d608-1c3f-fcd39a9c881d.png)

#### 下り
`#igr-eki-diadown > div > div:nth-child(1) > table > tbody > tr`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/3d04624c-d869-1023-97f9-24194677b804.png)

#### 得られたテキストデータ
データの前後に余計な改行コードが見えます。
例）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/08eed807-6435-ed68-1e85-115774c46a29.png)

### Changeノード（Trim）
抽出で得られたテキストデータには、複数の改行コードが含まれています。Changeノードでトリムします。さらに、msg.topicに上りのデータか下りのデータか名前を付けておきます。

#### 上り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/32f9a564-d82d-999d-ef7e-c2d04450a20e.png)

#### 下り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/be3258be-89b6-a5ec-7ce8-5b2401e14c6d.png)

#### 得られたテキストデータ
トリムされて、データとデータの間にはスペースになっています。
例）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/c76ce015-4232-aea8-4606-ef412e5fcd1f.png)


### CSVノード
CSVノードのプロパティは区切り文字を空白にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/289295ea-f63a-1951-b14e-9cb32887b9e1.png)
出力されたデータは配列にしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/015e678f-a207-5893-d97b-d755138b4fbe.png)

### Changeノード（整形）
上りか下りかの情報をJSONデータに含めたいので、Changeノードで整形します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/2c84a166-ece3-93ff-b8a3-8621e22789f8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/90fddc1b-8ca9-d373-3e02-d9b3b119c471.png)


### debugノード
特にプロパティは変更していないです。



## フローの実行結果


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/5a18e5ea-d93c-8ab2-2fef-066fbab5c8e4.png)

```
{"title":"滝沢駅上り","items":[{"時刻":"6:16","行先":"盛岡","のりば":3},{"時刻":"6:46","行先":"矢幅※","のりば":3,"記事":"ＪＲ東北本線直通"},{"時刻":"7:09","行先":"盛岡","のりば":3},{"時刻":"7:21","行先":"日詰","のりば":3,"記事":"ＪＲ花輪線から東北本線直通"},{"時刻":"7:32","行先":"北上","のりば":3,"記事":"ＪＲ東北本線直通"},{"時刻":"7:42","行先":"盛岡","のりば":3},{"時刻":"7:50","行先":"日詰","のりば":2,"記事":"ＪＲ東北本線直通"},{"時刻":"8:01","行先":"盛岡","のりば":3,"記事":"ＪＲ花輪線から"},{"時刻":"8:18","行先":"盛岡","のりば":2},{"時刻":"8:35","行先":"盛岡","のりば":2},{"時刻":"8:45","行先":"盛岡","のりば":3},{"時刻":"9:08","行先":"盛岡","のりば":3,"記事":"土休日運休"},{"時刻":"9:23","行先":"盛岡","のりば":3,"記事":"ＪＲ花輪線から"},{"時刻":"9:43","行先":"盛岡","のりば":3},{"時刻":"9:53","行先":"北上","のりば":2,"記事":"ＪＲ東北本線直通"},{"時刻":"10:10","行先":"盛岡","のりば":3},{"時刻":"11:03","行先":"盛岡","のりば":3},{"時刻":"11:32","行先":"盛岡","のりば":3},{"時刻":"12:24","行先":"盛岡","のりば":3,"記事":"ＪＲ花輪線から"},{"時刻":"12:43","行先":"盛岡","のりば":3},{"時刻":"13:03","行先":"盛岡","のりば":2}]}
```

## まとめ

functionノードを使わなくても、時刻表データをJSON形式にできました。