这是我的代码:
var request = require('request'),
cheerio = require('cheerio'),
async = require('async');
function updateCars(){
function getReviews(body){
var $ = cheerio.load(body);
var year = $(this).find(".field-item").text();
}
async.series([
....
function(callback) {
request(site+path, function(err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$(".views-row").each(getReviews(body));
}
});
}
]);
}
当我在 Node 控制台中运行它时,出现以下错误:
SyntaxError: Malformed attribute selector: object global]
我该如何解决?
最佳答案
错误...
SyntaxError: Malformed attribute selector: object global]
实际上是正确的。由于这里只发布了一段有问题的代码,因此并不完全清楚在哪里发生了这种情况,但这绝对是属性选择器中的笔误 - 很可能是这个...
答案:
$('div[id^=foo_bar'); // <-- missing the closing ]
上面的例子是一个你通常(或者你正在抓取的网站的编码者)不会注意到的错误,因为 jQuery 通常会悄悄地处理这个错误......
证明 jQuery 处理它:
var fooBars = $('a[id^="foo_bar"'); //<-- missing closing ]
$('#results').append("See... jQuery don't care about your closing ']' -" + fooBars.length)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="foo_bar_1">1</a>
<a id="foo_bar_2">2</a>
<a id="foo_bar_3">3</a>
<a id="foo_bim_4">4</a>
<a id="foo_bar_5">5</a>
<div id="results"></div>
解释:
错误实际上是Sizzle在下面的某个地方对你大喊大叫cheerio .当 jQuery 使用纯 javascript 实现时...
var fooBar = document.querySelectorAll('a[id="foo_bar"'); // <-- missing
alert(fooBar.length); // works!
Cheerio 使用的是 Sizzle,它不喜欢“格式错误”的属性(曾经在 IE 7-9 中也是一个问题)...
Like jQuery, [Cheerios] primary method for selecting elements in the document, but unlike jQuery it's built on top of the CSSSelect library, which implements most of the Sizzle selectors.
关于javascript - Cheerio: SyntaxError: Malformed attribute selector: object global?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25893855/