Fal*_*son 3 javascript jquery jquery-selectors cheerio
有一个包含许多javascript标签的大型html文件.我正在尝试挖出该变量的内容.变量名保持不变,但每个请求的内容都会更改.
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>
Run Code Online (Sandbox Code Playgroud)
想要的控制台结果
> var result = $('script').<some_selection_thingy>
result = {"b":"bar","c":"cat"}
Run Code Online (Sandbox Code Playgroud)
让我解释一下......我的意思是我的问题是 - a)如何选择具有内容'var foo'的数组对象b)如何获取var foo变量的内容以便我可以将该信息导入到本地json变量中以进行进一步处理.
当你在控制台中运行$('script')时,jquery返回一个数组.
> $('script')
[<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">...</script>]
Run Code Online (Sandbox Code Playgroud)
因为这是cheerio实际上并不是jquery,所以dom没有加载所以我不能只做$(foo). 有一个替代方案,我可以使用jsdom而不是cheerio,但我已经读过其他stackoverflow响应(在研究这个问题时),它的性能较差,所以我更愿意学习正确的jquery选择器,我需要挖出这个变量.
server.js
// some cheerio node code
url = 'someurl';
request(url, function(error, response, html){
var $ = cheerio.load(html);
result = $('script').map(&:text).select{ |s| s['var foo'] }
result = result[0]
//SyntaxError: Unexpected token &
Run Code Online (Sandbox Code Playgroud)
这当然是预期的,因为.map(&:text)是我在使用xpath但不能使用cheerio(jquery)时所做的事情.
Fal*_*son 11
我知道了!
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);
Run Code Online (Sandbox Code Playgroud)
var cheerio = require('cheerio');
$ = cheerio.load(html);
Run Code Online (Sandbox Code Playgroud)
那么你应该有你的文本$('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' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6134 次 |
| 最近记录: |