我认为这可能只是基本语法。我来自 Java,对 Javascript 非常陌生。例如,当我在所有示例中看到 $ 时,我的大脑一片空白。
解析 HTTP 请求(包含一堆狗节目)的代码如下所示(使用请求库):
function parseRequest1(error, response, body) {
// TODO should check for error...
var Cheerio = require('cheerio');
parser = Cheerio.load(body);
var table2 = parser('.qs_table[bgcolor="#71828A"]');
var showList = [];
// skip over a bunch of crap to find the table. Each row with this BG color represents a dog show
var trows = parser('tr[bgcolor="#FFFFFF"]', table2);
trows.each(function(i, tablerow) {
var show = parseShow(tablerow);
if (show) // returns a null if something went wrong
showList.push(show);
});
// then do something with showList...
}
这被称为
Request.get(URL, parseRequest1);
到现在为止还挺好。我陷入困境的是如何编写 parseShow 函数。我想去类似的东西
function parseShow(tableRow) {
var tds = parser('td', tableRow);
//and then go through the tds scraping info...
}
但我收到一个错误:
TypeError: Object #<Object> has no method 'find'
at new module.exports (C:\Users\Morgan\WebstormProjects\agility\node_modules\cheerio\lib\cheerio.js:76:18)
at exports.load.initialize (C:\Users\Morgan\WebstormProjects\agility\node_modules\cheerio\lib\static.js:19:12)
at parseShow (C:\Users\Morgan\WebstormProjects\agility\routes\akc.js:20:15)
查看堆栈跟踪,看起来 Cheerio 正在创建一个新的。我应该如何将 Cheerio 解析器传递给第二个函数?现在解析器是文件中的全局变量。
我已经尝试了一堆这样的随机事情,但它们也不起作用:
var tds = tableRow('td');
var tds = Cheerio('td', tableRow);
我被迫做的是一堆令人作呕的,脆弱的代码访问tableRow.children[1], tableRow.children[3]
等......(HTML有/ r / ns在创建所以很多孩子都是空白)