2017-09-28 3 views
-1

저는 자바 스크립트를 통해 데이터를 생성하는 사이트에서 데이터를 긁어 내려고했지만, 호출하는 스크립트를 찾을 수없는 것 같습니다. 페이지 소스를 살펴보면 검색 할 데이터의 배열이있는 변수가있는 인 페이지 스크립트가 있지만 데이터를 검색하고자하는 여러 회사의 모든 코드가 포함 된 다른 스크립트가 있습니다. 이것은 지금까지 해봤습니다 :phantomjs로 동적 내용을 긁어내는 웹

var url = 'http://www.asx.com.au/asx/share-price-research/company/ZAM/details'; 
var page = require('webpage').create(); 
page.open(url, function (status) { 
    var digitalData = page.evaluate(function() { 
      return window.digitalData; 
     })page.then(function (digitalData) { 
      console.log 
     } 
      ('DigtalData is ' + digitalData)); 
    phantom.exit(); 
}); 

불행히도 위의 스크립트는 아무것도 출력하지 않습니다.

var locationPath = window.location.pathname.split('/'); 
var companyCode = locationPath[locationPath.length - 1].trim(); 
var sectorCodes = { 
    "MOQ": "soft", 
    "1PG": "soft", 
    "ONT": "heal", 
    "1ST": "heal", 
    "T3D": "food", 
    "TGP": "real", 
    "TIX": "real", 
    "TDO": "ener", 
    "DDD": "mate", 
    "3PL": "cons", 
    "4DS": "semi" 
}; 

setTimeout(function() { 
    googletag.cmd.push(function() { 
     googletag.defineSlot('/76291182/ASX_leaderboard_com_info', [728, 90], 'div-gpt-ad-1450158832871-0').addService(googletag.pubads()); 
     googletag.defineSlot('/76291182/ASX_MREC_com_info', [[300, 250], [300, 600]], 'div-gpt-ad-1450158832871-1').addService(googletag.pubads()); 
     googletag.defineSlot('/76291182/ASX_MREC_lower_com_info', [300, 250], 'div-gpt-ad-1450158832871-2').addService(googletag.pubads()); 
     googletag.defineSlot('/76291182/ASX_skyscraper_com_info', [160, 600], 'div-gpt-ad-1450158832871-3').addService(googletag.pubads()); 
     googletag.defineSlot('/76291182/ASX_half_page_com_info', [300, 600], 'div-gpt-ad-1450158832871-4').addService(googletag.pubads()); 
     googletag.pubads().setTargeting("cc", companyCode); 

     if (typeof sectorCodes[companyCode] != 'undefined') { 
      googletag.pubads().setTargeting('sec', sectorCodes[companyCode]); 
     } 
     googletag.enableServices(); 
    }); 
}, 2000); 

이 스크립트는 단지 회사의 코드 그러나 그것의 유일한 JS 스크립트를 포함하는 것보다 훨씬 더 많은 일을 할 것 같다 : 내가 생각에서 데이터를 얻을하고자하는 회사에 대한 코드를 포함하는 스크립트는 이것이다 나는 그 회사 코드를 찾을 수 있습니다. 내가 원하는 데이터가이 스크립트에서 믿고 : 동적 콘텐츠를 긁어에

<div class="view-content" ui-view></div> 

임 새로운이 할 열심히 같습니다

var currentURL = (document.URL); 
var part = currentURL.split("/")[6]; 
// var dwsDTM = $('#company-code-title').text(); 

var digitalData = { 
    "page": { 
     "pageInfo": { 
      "pageID": "3345", 
      "pageName": "Company info " + part, 
      "pageURL": window.location.href, 
      "issueDate": "n/a", 
      "updatedDate": "n/a", 
      "brand": "ASX", 
      "generator": "OpenText", 
      "domain": "Website", 
      "sysEnv": "", 
      "delayType": "Normal" 
     }, 
     "category": { 
      "primaryCategory": "Prices and research", 
      "subCategory1": "Company information", 
      "subCategory2": "Company info " + part, 
      "subCategory3": "", 
      "pageType": "" 
     }, 
     "productInfo": {} 
    }, 
    "user": { 
     "profileInfo": { 
      "memberB2B": "", 
      "businessMemberID": "", 
      "memberRetail": "", 
      "retailMemberID": "" 
     }, 
     "version": "1.0", 
     "events": [], 
     "vendor": { 
      "GoogleAnalytics": { 
       "account": "UA-9950793-3", 
       "eventCategory": "" 
      } 
     } 
    } 
}; 

나는 그것이 HTML로 생성을 믿습니다. 누군가이 데이터를 검색하기 위해 올바른 방향으로 나를 가리킬 수 있습니까? 감사합니다.

업데이트 : 사이트에서 몇 시간을 재생 한 후 데이터 콜백에 angularJS를 사용하고 추가 재생시 데이터를 저장하는 데 사용하는 링크를 찾았습니다. 그들에는 API가있다 그러나 나는 대중적으로 이용 가능하다고 생각하지 않는다. 어쨌든 나는 데이터를 검색하고 포맷하기 위해 간단한 DOM 스크립트를 작성할 수 있다고 생각한다. 모두 게시 할 것입니다

+0

제공된 URL에서 "ZAMANCO MINERALS LIMITED"에 대한 정보를 볼 수 있습니다. 다시 거기에서 무엇을 갖고 싶니? – Vaviloff

+0

@ Vaviloff 불행히도 필요한 데이터를 검색 할 수 없기 때문에 ASX 사이트에는 회사 데이터에 액세스 할 수있는 API가 없습니다. 간단한 DOM Parser를 사용했을 때만 정적 데이터 나 데이터가 자바 스크립트를 통해 생성되지 않았습니다. –

+0

먼저이 작업은 [서비스 약관] (http://www.asx.com.au/about/)에 위배됩니다. terms-use.htm). 그래서 이것을 강력히 권고 할 것입니다. 즉, 이와 같은 상황에서 찾고자하는 일반적인 패턴은 다른 phantomjs 함수를 사용하여 페이지와 상호 작용하고 긁기 전에 필요한 내용을 기다리는 것입니다. 또 다시, 나는 그것을 여기에서 사용하는 것을 권하지 않고있다. 그것은 그들의 서비스 약관에 위배되며 귀하는 그것을 존중해야합니다. – GotDibbs

답변

0

솔루션을 찾았습니다. API를 사용하고 HTML DOM과 PHP를 사용하여 원하는 데이터를 검색 한 다음 데이터를 CSV로 출력 할 수있었습니다. 내 용어 나 서비스를 위반하기 때문에 코드 나 API에 대해 설명 할 수 없습니다.

관련 문제