NodeRED에서 모두 사랑하는 IGR 시간표 스크래핑
최근 NodeRED (enebular)를 자주 사용하기 때문에 공부가 테라 스크래핑에 도전합니다.
@omega999 군의 모두가 사랑하는 IGR 시간표를 스크래핑 의 기사 인스파이어입니다.
IGR
모두가 좋아, 이와테 은하철도 네요.
이번에는 타키자와 역의 시각표를 꺼내 보겠습니다. h tp // w w. 이 gr. jp / wp / 치메타 b / 타키자와
최종적으로 이런 JSON으로 출력해 API화합니다.
enebular에서 스크래핑 챌린지
우선 그대로 HTML 리소스 취득
의 각 노드를 연결합니다.
http requestノード
의 URL에 이번 엔드 포인트가 되는 타키자와역의 시간표 페이지 http://www.igr.jp/wp/timetable/takizawa
를 지정합니다.배포하고 URL에 액세스하여 디버그 콘솔을 확인합니다.
제대로 잡히네요.
이것을 사용자 정의해 봅시다.
html 노드 사용
다른 좋은 방법이 있을지도 모릅니다만, html 노드를 사용하면 HTML로부터 CSS 셀렉터를 사용해 요소를 꺼낼 수 있는 모양.
편리하자.
그래서 사용해 보겠습니다.
조사한 바
class="post"
의 p요소에 시간표가 들어 있는 모양입니다.이런 느낌으로 설정해주면 그와 같은 시간표를 얻을 수 있었습니다.
.post p
p 요소가 배열로 취득할 수 있는 이미지입니다.
Switch 노드로 필터링
현대생이 자주 사용하는 타키자와역에서 모리오카역 방면으로의 전철(오르막)을 좁힙니다.
Switch 노드에서
盛岡
라는 단어가 포함된 요소를 필터링합니다.盛岡
function 노드에서 json으로 성형
마지막으로 function 노드를 사이에 두고 JavaScript를 작성합니다. 마지막은 http out의 노드에 연결하면 JSON 출력됩니다.
const tmp = msg.payload.match(/(.*) (.*)/g); // 6:16 盛岡の形式を取得
let content = [];
for(let i = 0,len = tmp.length; i<len; i++){
const item = tmp[i].split(' ');
content.push({
time: item[0],
destination: item[1]
})
}
msg.payload = {
title: '滝沢駅上り',
items: content
}
return msg;
msg.payload.match(/(.*) (.*)/g);
의 개소에서 정규 표현으로 매치한 시각 정보를 배열로서 취해 오고, for문의 개소에서 json에 정형하고 있습니다.결과
사용성이 좋은지 모르지만 JSON 출력할 수 있었습니다.
요약
function 노드를 사용하지 않고 기존 노드를 구사하고 싶었지만 NodeRED 힘이 너무 많아 한계를 느꼈습니다.
더 스마트하게 할 수 있는 방법이 생각나는 사람이 있으면 꼭 가르쳐 주세요!
Reference
이 문제에 관하여(NodeRED에서 모두 사랑하는 IGR 시간표 스크래핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/n0bisuke/items/bd5329296fc188199993텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)