Доступ к содержимому скрипта с помощью cheerio - PullRequest
0 голосов
/ 02 мая 2018

Я использую Cheerio и обращаюсь к Node.js с просьбой выполнить некоторые основные операции по поиску в сети, но не могу понять, как получить доступ к данным. Страница загружается по запросу, и я могу console.log заголовка страницы, используя Cheerio, но когда я получаю сценарии, это сложный беспорядок объектов.

В разделе тела страницы это выглядит как ..

<body> 
  <script src="someUrl" script type="text/javascript" /> 
  <script src="someUrl" script type="text/javascript" /> 
  <script src="someUrl" script type="text/javascript" />
  <script type="text/javascript">var months = [6,12,24,36,48,60]; var amounts = [5000,10000,15000,20000,25000]</script>

Я пытаюсь добраться до переменных в последнем скрипте, чтобы сохранить их как переменные в моем скрипте узла для использования, но я не могу получить к ним доступ, даже как текст.

Когда я пытаюсь сделать это в узле, я получаю заголовок страницы, за которым следует огромный ответ объекта в консоли, а не переменный текст для анализа. Предложения?

$ = cheerio.load(body);
console.log($('title').text());
var text = $('script');
console.dir(text[3]);

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете анализировать эти переменные с помощью регулярных выражений, но cheerio немного грязно:

var cheerio = require('cheerio')
var html = `
<body>
  <script src="someUrl" type="text/javascript" />
  <script src="someUrl" type="text/javascript" />
  <script src="someUrl" type="text/javascript" />
  <script type="text/javascript">var months = [6,12,24,36,48,60]; var amounts = [5000,10000,15000,20000,25000]</script>
</body>
`
var str, $ = cheerio.load(html, {xmlMode: true}); // xmlMode: true is a workaround for many cheerio bugs.
console.log(str = $('script:not([src])')[0].children[0].data) // no cleaner way to do this, cheerio?
// var months = [6,12,24,36,48,60]; var amounts = [5000,10000,15000,20000,25000]

var months = JSON.parse(str.match(/months = (\[.*?\])/)[1])
console.log(months)
// [ 6, 12, 24, 36, 48, 60 ]

var amounts = JSON.parse(str.match(/amounts = (\[.*?\])/)[1])
console.log(amounts)
// [ 5000, 10000, 15000, 20000, 25000 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...