2017-01-17 1 views
0

실제로 CasperJs의 웹 사이트에서 데이터를 가져 오려고합니다. 데이터는 테이블에 저장됩니다. 스크랩 후 올바른 JSON 파일을 가져 오려고합니다. json과 함께 : - 회사 이름, - 메일, - 웹 사이트 - 활동에 대한 설명CasperJS는 JSON 출력을 위해 테이블을 통과하고 데이터를 긁습니다.

지금까지는 페이지를 열어 데이터를 가져올 수 있었지만 정확하지는 않았습니다 (메일과 웹 사이트는 동일합니다). 그래서 내가 원하는 각 요소를 정확하게 선택하는 방법을 찾았습니다. 하지만이 경우 나는 모든 테이블 정보를 얻지 못합니다. 첫 번째 행은 ...

누군가가 나를 도와 줄 수 있는지, 내 경우에 루프를 만드는 방법을 말해 주시겠습니까? 나는 전문적인 developper가 아니라고 가정하고, 나는 훈련 중이다. 여기

내 코드 : 여기

var casper = require('casper').create(); 
var url = 'http://www.rent2016.fr/pages/exposants'; 
var fs = require('fs'); 
var length; 

casper.start(url); 

casper.then(function() { 
    this.waitForSelector('table#myTable'); 
}); 

casper.then(function(){ 
    var info = this.evaluate(function(){ 
     var table_rows = document.querySelectorAll("tr"); //or better selector 

     return Array.prototype.map.call(table_rows, function(tr){ 
      return { 

       nom : document.querySelector(".td-width h3").textContent, 
       description: document.querySelector(".td-width p").textContent, 
       mail : document.querySelector("td span a").textContent, 
       site : document.querySelector('td span a[href^="http"]').textContent, 



      }; 
     }); 
    }); 

    fs.write('test_rent_stringify.json', JSON.stringify(info), 'w'); 
    this.echo(JSON.stringify(info, undefined, 4)); 

}); 


casper.run(function() { 

}); 

, 우리는 루프가없는 : JSON은 첫 번째 행 정보의를 반복합니다. 모든 행을 얻으려면 모든 정보를 얻을 수 ... 당신이

nom : tr.children[1].textContent, 

에 의해

nom : document.querySelector(".td-width h3").textContent, 

를 교체해야하지만,이 경우에 당신이 정확하게 H3, 링크를 타겟팅 할 수 없습니다 정보. 그래서 사실은 내가 할 수있는 : 행을 통해

  • 루프와 정보를 얻을 수 있지만, 사용할 수 없게

  • 는 첫 번째 행의 정보를 가지고 있지만 사전에 좋은 프리젠 테이션

감사합니다!

+1

은 아마이 포스트는 도움이 -> http://stackoverflow.com/questions/41273739/how-do-scrape-table-from-the -provided-website-using-casperjs/41302965 # 41302965 당신은 원하는대로 결과를 Obejct/Array/File에 링크 된 솔루션으로 작성하면됩니다. – dasmelch

+0

고마워요.하지만 이미이 게시물을 확인했습니다. 동일한 문제가 발생합니다. 원하는 데이터를 선택하기 위해 행 내부로 정확하게 갈 수 없습니다. 그러나 이것보다 더, 여기에 나는 모든 DATAS를 얻지 못하며, 회사의 제목과 설명 만 얻는다. 동일한 에 있습니다. – ArnaudHMZ

답변

2

모든 요소 내부에서 정보를 가져 오려면 document.querySelector 대신 tr.querySelector를 사용해야합니다.

다음 루프는 페이지가 잘 작동 :

var table_rows = document.querySelectorAll("tbody tr"); //or better selector 
return Array.prototype.map.call(table_rows, function(tr) { 
    return { 
     nom: tr.querySelector(".td-width h3").textContent, 
     description: tr.querySelector(".td-width p").textContent, 
     mail: tr.querySelector('td span a[href^="mailto"]').textContent, 
     site: tr.querySelector('td span a:not([href^="mailto"])').textContent 
    }; 
}); 
+0

코드를 작성해 주셔서 감사 드리며, 잘못된 길을 간략히 설명해 주셨습니다! 그게 내 문제를 해결했습니다! – ArnaudHMZ

관련 문제