使用cheerio js和node js

时间:2016-10-17 21:57:14

标签: javascript jquery node.js web-scraping cheerio

我有很多具有以下结构的html文件。我需要从下面获取值'GET'和'http://localhost:5601/app/sense'。但它们在所有文件中的值不完全相同,可以是邮寄,放置或删除。但是html结构是一样的。

<colgroup>
      <col class="col-lg-1">
      <col class="col-lg-7">
   </colgroup>
   <tbody>
      <tr>
         <td>
            <code>Method</code>
         </td>
         <td>GET</td>
      </tr>
      <tr>
         <td>
            <code>URL Path &amp; Params</code>
         </td>
         <td>http://localhost:5601/app/sense</td>
      </tr>
   </tbody>
</table>

有关如何使用cheerio进行此操作的任何建议?我试图通过HTML表解析在td元素中搜索方法和URL值,但我没有运气。

glob(__dirname + "/../docs/*/*/*/*/*/*.html", function (er, files) {
    for (var i = 0; i < files.length; i++) {

        fs.readFile(files[i], (err, data) => {
            if (err) throw err;
            $ = cheerio.load(data);
            $('tr').each(function () {
                console.log($('td').val());
            });
        });

    }
});

2 个答案:

答案 0 :(得分:0)

您必须定位每个TD并获取文本,它没有值

glob(__dirname + "/../docs/*/*/*/*/*/*.html", function (er, files) {
    for (var i = 0; i < files.length; i++) {

        fs.readFile(files[i], (err, data) => {
            if (err) throw err;
            var $ = cheerio.load(data);

            var method = $('tr').eq(0).find('td').eq(1).text();
            var url    = $('tr').eq(1).find('td').eq(1).text();

        });

    }
});

答案 1 :(得分:0)

使用.eq和.find方法查找您的值https://cheerio.js.org/

glob(__dirname + "/../docs/*/*/*/*/*/*.html", function (er, files) {
   for (var i = 0; i < files.length; i++) {

        fs.readFile(files[i], (err, data) => {
          if (err) throw err;
          $ = cheerio.load(data);
          console.log($('tr').eq(0).find('td').eq(1).text());
          console.log($('tr').eq(1).find('td').eq(1).text());
       });
   }
});