【问题标题】:Is there a way to crawl a site and grab JavaScript variables on each page?有没有一种方法可以抓取网站并抓取每个页面上的 JavaScript 变量?
【发布时间】:2013-09-26 19:51:18
【问题描述】:

我工作的公司将在几个月后重新设计网站,我们需要一个表格,其中包含网站上每个页面的每个 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 的尝试似乎在标签之间引入了全部内容,这需要在事后进行大量清理。

【问题讨论】:

    标签: javascript xpath phantomjs rapidminer adobe-analytics


    【解决方案1】:

    如果您使用 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

    【讨论】:

    • 太棒了!您知道如果页面上不存在该特定变量会发生什么吗?
    • 这会在网页的上下文中引发 javascript 错误,而您的结果变量 dataFromPage 将返回 null...不过,您可能应该在页面中处理它,if (typeof metrics_level2 != 'undefined')
    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2021-03-20
    相关资源
    最近更新 更多