2013-09-26 6 views
1

Компания, с которой я работаю, собирается через редизайн сайта через несколько месяцев, и одна из вещей, в которой мы нуждаемся, - это таблица, содержащая каждый URL каждой страницы на сайте. Тогда оптимально будут столбцы, содержащие значения набора предопределенных переменных JavaScript (в данном случае переменных Omniture, поэтому мы можем гарантировать, что каждая страница будет правильно помечена своим местом в иерархии сайта).Есть ли способ обхода сайта и захвата переменных JavaScript на каждой странице?

Вот пример того, что может быть в 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, похоже, содержат все содержимое между тегами, что требует много очистки после факта.

ответ

4

Если вы используете 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

+0

Это рад! Знаете ли вы, что произойдет, если эта конкретная переменная не существует на странице? – denverfone

+0

Это привело бы к ошибке javascript в контексте веб-страницы, и ваша результирующая переменная 'dataFromPage' вернула бы нуль ... вы, вероятно, должны обрабатывать это на странице, хотя' if (typeof metrics_level2! = 'Undefined') ' –