用phantomjs抓取动态内容的网页

时间:2017-09-28 07:39:16

标签: javascript phantomjs

我试图从通过javascript生成数据的网站抓取数据,但我似乎无法找到调用脚本。当我查看页面源时,有一个页内脚本,其中包含一个变量,该变量包含我想要检索的数据数组,但是还有另一个脚本包含我希望从中检索数据的各个公司的所有代码。这是我到目前为止所尝试的:

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脚本来检索和格式化数据。将保留所有发布的信息

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。利用他们的API并使用HTML DOM和PHP,我能够检索我想要的数据,然后将数据输出到CSV。我无法讨论我的代码或API,因为它违反了他们的条款和服务。