代码之家  ›  专栏  ›  技术社区  ›  denverfone

有没有一种方法可以抓取网站并获取每个页面上的JavaScript变量?

  •  1
  • denverfone  · 技术社区  · 11 年前

    我工作的公司将在几个月后进行网站重新设计,我们需要的一件事是一个包含网站上每个页面的每个URL的表格。然后,最佳情况下,会有包含一组预定义JavaScript变量值的列(在本例中为Omniture变量,因此我们可以确保每个页面都正确标记其在站点层次结构中的位置)。

    以下是给定页面的HTML中可能包含的内容的示例:

    <script type="text/javascript">     
    metrics_level2  = "biz";
    metrics_level3  = "products";
    metrics_level4  = "my_awesome_product";
    metrics_pagename    = "biz|products|my_awesome_product";    
    </script>
    

    我已经用RapidMiner对网站进行了爬网,数据已经准备好了,但我的问题是隔离这些变量并将“metrics_level2”、“metrics_level3”等放在它们自己的列中的最佳方法。XPath是最好的方法吗?正则表达式?我使用XPath的尝试似乎在标记之间引入了全部内容,这需要在事后进行大量清理。

    1 回复  |  直到 11 年前
        1
  •  4
  •   Artjom B.    10 年前

    如果您使用PhantomJS http://phantomjs.org/ 您可以简单地访问这些变量,就像您在网页中使用JavaScript一样。一个非常简单的例子如下:

    //where url is the page that contains these variables.
    page.open(url, function (status) {
        //Page is loaded!
        var dataFromPage = page.evaluate(function(){
           return {
                     metrics_level2:metrics_level2,
                     metrics_level3:metrics_level3,
                     metrics_level4:metrics_level4
                  };
        });
        //dataFromPage now contains those variables
    
        phantom.exit();
    });
    

    如果您已经将网页刮取并保存到html文件或其他文件中,则可以使用 content 方法相当于打开如上所述的页面。看见 http://phantomjs.org/api/webpage/property/content.html