2017-12-09 27 views
0

API가없는 사이트에서 일부 통계를 받아야합니다. 소스 코드를 확인한 후 필자는 필요한 데이터가 통계 그래픽을 작성하는 데 사용되는 것을 확인했습니다. NodeJS Cheerio, 스크랩 및 변수 받기

나는 힘내라 요청 &를 사용하여 스크립트 태그를 얻을 수있었습니다 :

request(nodeUrl, function(error, res, body) { 
    var $ = cheerio.load(body); 

    var scripts = $('script').filter(function() { 
     return ($(this).html().indexOf('Dygraph(document') > -1); 
    }); 
    if (scripts.length === 1) { 
     var text = $(scripts[0]).html(); 
     console.log(text); 
    } 
}); 

나는 (읽기 쉽게하기 위해 JS 포매터를 사용하여 주변의 다른 모든 스크립트를 제거)해야 할 데이터 :

d = new Dygraph(document.getElementById("container"), [ 
    [new Date("2017/08/01"), 0.0654], 
    [new Date("2017/08/02"), 0.257], 
    [new Date("2017/08/03"), 0.245], 
    [new Date("2017/08/04"), 0.15], 
    [new Date("2017/08/05"), 0.107], 
    [new Date("2017/08/06"), 0.109], 
    [new Date("2017/08/07"), 0.143], 
    [new Date("2017/08/08"), 0.222], 
    [new Date("2017/08/09"), 0.166], 
    [new Date("2017/08/10"), 0.156], 
    [new Date("2017/08/11"), 0.143], 
    [new Date("2017/08/12"), 0.199] 
]); 
어떤 제안이 좋은 것 [새 Date ("2017년 8월 12일"), 0.199]

:

난 단지 모두 필요합니다. 미리 감사드립니다.

답변

1

정규 표현식을 사용하여 데이터를 구문 분석 할 수 있습니다.

var re = /new Date\("([0-9]{4}\/[0-9]{2}\/[0-9]{2})"\), ([0-9]+\.[0-9]+)/g; 
var m; 
do { 
    m = re.exec($(scripts[0]).html()); 

    // scraped data: 
    // [new Date(m[1]), m[2]] 
} 
while (m) 
+0

감사합니다. 날짜 (첫 번째 매개 변수)가 아니라 값 (두 번째 매개 변수)에있는 null 값이 있음을 알 수 있습니다. 나는 시도했다 : \ [new Date \ ("([0-9] {4} \/[0-9] {2} \/[0-9] {2})"\), (*) \], 그러나 그것과 일치하지 않습니다. 예 : [new Date ("2017/10/29"), null] – Eduardo

+0

: \ [새 날짜 \ ("(0-9) {4} \/[0-9] {2} [0-9] {2}) "\), ([0-9] \. [0-9] + | null) \] – Eduardo