PhantomJS抓取:在脚本标记中获取CDATA

时间:2017-04-11 13:00:54

标签: javascript html5 dom phantomjs

我正在尝试使用PhantomJS从网页中提取一些JS生成的数据。 我能够获得page.content,我可以看到我感兴趣的数据包含在脚本和CDATA标记中:

<!DOCTYPE html>
    <html style="" class="someclass">
    <head>
        <meta class="meta-class-1">
        <meta class="meta-class-1">

        <link rel="shortcut" type="image/x-icon" href="/assets/...">
        <meta content="width=device-width, initial-scale=1, maximum-scale=1.0" name="viewport">
        <title>Page Title</title>
        <link rel="stylesheet" media="all" href="/assets/page.css">
        <script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script>
        <script>
            //<![CDATA[
            window.gon={};gon.data={ "Interesting data":"the data" };
            //]]>
        </script>

        <script src="//anoterscript.js"></script>

    </head>
    <body>
    </body>
    </html>

这是我尝试获取其中一个脚本失败的尝试之一。内容:

"use strict";
var page = require('webpage').create();

page.open('https://prioridata.com/apps/monzo-1052238659/country-split', function () {

  page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {

    var scriptCtnt = page.evaluate(function() {
       return [].map.call(document.getElementsByTagName('script')[0].innerHTML, function(data) {             
            return data;
        });
    });

    console.log('Data is ' + JSON.stringify(data));

    phantom.exit()
  });
});

我试图用几种不同的方式解析结果(libxml和node-phantom,使用JQuery解析page.content),但到目前为止还无法获取任何脚本数据。 是否可以使用PhantomJs实现这一目标?我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

document.getElementsByTagName('script')[0].innerHTML

首先看一下您选择的标签:

<script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script>

它没有任何内容。如果要获取脚本,则需要向https://www.google-analytics.com/analytics.js发送新的HTTP请求。

看起来你真的想要这个脚本:

    <script>
        //<![CDATA[
        window.gon={};gon.data={ "Interesting data":"the data" };
        //]]>
    </script>

不是页面上的第一个脚本。您需要选择正确的标签。

可能只是使用1代替0