如何使用ChereIO(类似于jquery的选择器,但没有dom)生成javascript变量的内容

如何使用ChereIO(类似于jquery的选择器,但没有dom)生成javascript变量的内容,javascript,jquery,jquery-selectors,cheerio,Javascript,Jquery,Jquery Selectors,Cheerio,有一个很大的html文件,其中有许多javascript标记。我正试图找出那个变量的内容。变量名保持不变,但每次请求的内容都会更改 examplefile.html <script type="text/javascript">//.... more js</script> <script type="text/javascript">//.... more js</script> <script type="text/javascript"

有一个很大的html文件,其中有许多javascript标记。我正试图找出那个变量的内容。变量名保持不变,但每次请求的内容都会更改

examplefile.html

<script type="text/javascript">//.... more js</script>
<script type="text/javascript">//.... more js</script>
<script type="text/javascript">var foo = {"b":"bar","c":"cat"}</script>
<script type="text/javascript">//.... more js</script>
<script type="text/javascript">//.... more js</script>
<script type="text/javascript">//.... more js</script>
这当然是意料之中的,因为如果我使用xpath,但不使用ChereIO(jquery),我会使用.map(&:text)

然后您应该通过
$('script')[0]获取文本。例如,text()

如果您解析的总是一个“var foo={“b”:“bar”,“c”:“cat”}模式,那么您可以执行以下操作来获取对象:

var text = $('script')[0].text();
var str = text.substr(text.indexOf('{'), text.indexOf('}'));
JSON.parse(str);
{ b: 'bar', c: 'cat' }
我明白了

function findTextAndReturnRemainder(target, variable){
    var chopFront = target.substring(target.search(variable)+variable.length,target.length);
    var result = chopFront.substring(0,chopFront.search(";"));
    return result;
}
var text = $($('script')).text();
var findAndClean = findTextAndReturnRemainder(text,"var foo =");
var result = JSON.parse(findAndClean);

cheerio
中,接受的答案对我不起作用。以下是我的解决方案:

var scripts = $('script').filter(function() {
    return ($(this).html().indexOf('var foo =') > -1);
});
if (scripts.length === 1) {
    var text = $(scripts[0]).html();
    ...parse the text
}

在cheerio和jquery控制台中尝试过,这很奇怪,它对我很有用。您是否正在将html作为字符串加载到cheerio?(更新的gist)url='someurl';请求(url,函数(错误,响应,html){var$=cheerio.load(html);向前看就足够了。如果您尝试访问.html()是否幸运取而代之的是?我想加入更多的上下文,只是为了确定我已经正确地传达了我正在尝试做的事情。有一个很大的html文件,其中有许多javascript标记。我正在尝试挖掘该变量的内容。变量名保持不变,但每次请求的内容都会发生变化。我有点困惑为什么选择selecting$('script')[0].text()将生成包含“var foo”的正确javascript标记。我将此作为数组中的第一项读取,该数组中有一个类型的对象,您正试图将其转换为字符串……cheerio和jquery都对此表示不满。
var cheerio = require('cheerio');
$ = cheerio.load(html);
var text = $('script')[0].text();
var str = text.substr(text.indexOf('{'), text.indexOf('}'));
JSON.parse(str);
{ b: 'bar', c: 'cat' }
function findTextAndReturnRemainder(target, variable){
    var chopFront = target.substring(target.search(variable)+variable.length,target.length);
    var result = chopFront.substring(0,chopFront.search(";"));
    return result;
}
var text = $($('script')).text();
var findAndClean = findTextAndReturnRemainder(text,"var foo =");
var result = JSON.parse(findAndClean);
var scripts = $('script').filter(function() {
    return ($(this).html().indexOf('var foo =') > -1);
});
if (scripts.length === 1) {
    var text = $(scripts[0]).html();
    ...parse the text
}