私はcheerioでテーブルからデータを抽出しようとしています。ここ は簡略化されたバージョンである: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/[email protected]"></script>
<title>JS Bin</title>
</head>
<body>
</body>
</html>
スクレーパークラスには2つのメソッドがあり、一つは、HTML(文字列)をロードし、チェリオオブジェクトを返すことができます。もう1人は(cheerio)オブジェクトを予期し、そこからhrefを返します。
最初のコンソールログには、findHref
が正常に動作することが示されています。次に、テーブル全体をロードし、その行をループします(この場合は1つだけです)。 each
ループthis
の内側には、roe(tr)オブジェクトが必要です。私は正しいセル(クラス 'with-link')を見つけようとして、それをfindHref
に渡します。
しかし、私は念のため
"TypeError: this.find is not a function
を取得しています、ここJsBinです:https://jsbin.com/vakofapiro/edit?js,console
のhrefあるTDの内部HTMLを与えるだろう。私が望むのは、cheerio tdオブジェクトをscraperのfindHrefメソッドに渡すことです。これは簡単な例です私のアプリではfindHrefメソッドははるかに多く、tdももっと複雑です。 – user3568719