Я пытаюсь извлечь некоторые данные из таблицы с помощью cheerio. Вот упрощенная версия:
const table = `
<table>
<tr>
<td></td>
<td class="with-link"><a href="www.foo.bar"></a></td>
</tr>
</table>
`
const row = `<td><a href="www.foo.bar"></a></td>`
class Scraper {
htmlToDom(html) {
return cheerio.load(html)
}
findHref(row) {
return row('a').attr('href')
}
}
const scraper = new Scraper()
const cheerioRow = scraper.htmlToDom(row)
console.log(scraper.findHref(cheerioRow))
const cheerioTable = scraper.htmlToDom(table)
cheerioTable('tr').each(function() {
//console.log(this)
let td = this.find('td.with-link')
console.log(scraper.findHref(td))
})
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="https://wzrd.in/standalone/cheerio@latest"></script>
<title>JS Bin</title>
</head>
<body>
</body>
</html>
Класс Scraper имеет два метода, один может загрузить html (строку) и вернуть объект cheerio. Другой ожидает объект (cheerio) td и возвращает от него href.
Первый журнал консоли показывает, что findHref
работает должным образом. Затем я загружаю всю таблицу, просматриваю ее строки (в данном случае только одну). Внутри each
цикла this
должен быть объект roe (tr). Я пытаюсь найти правильную ячейку (с классом with-link) и передаю ее findHref
.
Но я получаю
"TypeError: this.find не является функцией
На всякий случай вот JsBin: https://jsbin.com/vakofapiro/edit?js,console