Javascript 用phantomjs抓取动态内容
我试图从一个通过javascript生成数据的站点中获取数据,但我似乎找不到调用脚本。当我查看页面源代码时,有一个页面内脚本,其中包含一个变量,该变量包含我希望检索的数据数组,但还有一个脚本包含我希望检索数据的各个公司的所有代码。这就是我迄今为止所尝试的:Javascript 用phantomjs抓取动态内容,javascript,phantomjs,Javascript,Phantomjs,我试图从一个通过javascript生成数据的站点中获取数据,但我似乎找不到调用脚本。当我查看页面源代码时,有一个页面内脚本,其中包含一个变量,该变量包含我希望检索的数据数组,但还有一个脚本包含我希望检索数据的各个公司的所有代码。这就是我迄今为止所尝试的: var url = 'http://www.asx.com.au/asx/share-price-research/company/ZAM/details'; var page = require('webpage').create(); p
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脚本。我相信我想要的数据来自以下脚本:
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:
<div class="view-content" ui-view></div>
我是新来抓取动态内容的,这看起来很难做到。有人能告诉我检索这些数据的正确方向吗?
谢谢
更新:在网站上玩了几个小时后,我发现他们使用angularJS进行数据回调,在进一步玩的时候,我发现了他们用来存储数据的链接。他们有一个API,但我不认为它是公开的。无论如何,我认为我可以编写一个简单的DOM脚本来检索和格式化数据。会让你们大家都知道的我想出了一个解决办法。利用他们的API,使用HTMLDOM和PHP,我能够检索到我想要的数据,然后将数据输出到CSV。我无法讨论我的代码或API,因为这将违反他们的条款和服务。在提供的URL上,我看到了“ZAMANCO MINERALS LIMITED”的信息。你还想从那里得到什么?@Vaviloff很遗憾,我无法检索到我所需的任何数据,ASX站点没有访问公司数据的API。当我使用一个简单的DOM解析器时,我首先只能处理静态数据或不是通过Javascript生成的数据,这样做违背了他们的意愿。因此,我强烈建议中止这项计划。也就是说,在这种情况下,您需要寻找的一般模式是使用其他phantomjs函数与页面交互,并等待您需要呈现的内容,然后再将其删除。尽管如此,我还是不建议在这里使用它。这是违反他们的TOS的,你应该尊重这一点。你是对的,我将发布我的解决方案,并将其留在那里。我很感激Gotdibs的警告