使用 cheerio 访问脚本内容
Accessing script content with cheerio
我正在使用 Cheerio 并通过 Node.js 请求进行一些基本的网络抓取,但似乎无法弄清楚如何访问数据。页面通过请求加载,我可以使用 Cheerio console.log 页面标题,但是当我访问脚本时,它是一个复杂的 objects.
在页面的 body 部分看起来像..
<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>
我试图获取上一个脚本中的变量,将它们作为变量存储在我的节点脚本中以供使用,但我似乎无法访问它们,即使是文本。
当我在节点中尝试此操作时,我在控制台中得到页面标题后跟一些巨大的 object 响应,而不是要解析的变量文本。建议?
$ = cheerio.load(body);
console.log($('title').text());
var text = $('script');
console.dir(text[3]);
您可以使用正则表达式解析这些变量,但 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 ]
我正在使用 Cheerio 并通过 Node.js 请求进行一些基本的网络抓取,但似乎无法弄清楚如何访问数据。页面通过请求加载,我可以使用 Cheerio console.log 页面标题,但是当我访问脚本时,它是一个复杂的 objects.
在页面的 body 部分看起来像..
<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>
我试图获取上一个脚本中的变量,将它们作为变量存储在我的节点脚本中以供使用,但我似乎无法访问它们,即使是文本。
当我在节点中尝试此操作时,我在控制台中得到页面标题后跟一些巨大的 object 响应,而不是要解析的变量文本。建议?
$ = cheerio.load(body);
console.log($('title').text());
var text = $('script');
console.dir(text[3]);
您可以使用正则表达式解析这些变量,但 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 ]