これは単なる基本的な構文かもしれないと思います。私は 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 パーサーを 2 番目の関数に渡すにはどうすればよいですか? 現在、パーサーはファイル内のグローバル変数です。
私はこれらのようなランダムなことをたくさん試しましたが、どちらも機能しません:
var tds = tableRow('td');
var tds = Cheerio('td', tableRow);
代わりに私がしなければならないのは、一連の嫌な、壊れやすいコードへのアクセスtableRow.children[1], tableRow.children[3]
などです...(HTMLには /r/ns が作成されているため、多くの子は空白です)