用cheerio解析表行

时间:2017-07-13 17:57:05

标签: javascript 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/cheerio@latest"></script>
  <title>JS Bin</title>
</head>

<body>

</body>

</html>

Scraper类有两个方法,一个可以加载html(string)并返回一个cheerio对象。另一个期望一个(cheerio)td对象,并从中返回href。

第一个控制台日志显示findHref按预期工作。然后我加载一个整个表,遍历它的行(在这种情况下只有一个)。 each循环this内部应该是一个roe(tr)对象。我尝试找到正确的单元格(带有'with-link'类),并将其传递给findHref

但我得到了

  

“TypeError:this.find不是函数

以防万一,这里是JsBin:https://jsbin.com/vakofapiro/edit?js,console

1 个答案:

答案 0 :(得分:0)

而不是使用cheerioTable。

Restrict_Run

它将为您提供td的内部html,这是一个href