私はJavaScriptを介してデータを生成するサイトからデータを削り取ろうとしていますが、起動スクリプトを見つけることができません。私がページソースを見ると、検索したいデータの配列を持つ変数を持つページはずのスクリプトがありますが、データを取得したいさまざまな会社のすべてのコードを含む別のスクリプトがあります。これはこれまで私が試したことです:phantomjsで動的コンテンツを刻むWeb
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スクリプトを書くことができると思います。あなた全員が投稿してくれるでしょう
私は "ZAMANCO MINERALS LIMITED"に関する情報を提供しています。何をもう一度そこから手に入れたいですか? – Vaviloff
@ Vaviloff残念ながら、私は必要なデータを取得できませんでした.ASXサイトには会社のデータにアクセスするAPIはありません。私が単純なDOMパーサーを使用したとき、私は静的なデータまたはデータがjavacriptによって生成されなかっただけです –
まず、これを行うのは、[Terms of Service](http://www.asx.com.au/about/)です。 terms-use.htm)。だから私はこれを中止することを強く勧めます。つまり、このような状況で探している一般的なパターンは、他のphantomjs関数を使用してページとやりとりし、それをスクラップする前に存在する必要があるコンテンツを待つことです。繰り返しますが、私はここでそれを使用することを推奨していません。それはTOSに違反し、あなたはそれを尊重すべきです。 – GotDibbs