始终使用node.js + cheerio返回未定义

iibxawm4  于 2023-01-04  发布在  Node.js
关注(0)|答案(1)|浏览(109)

我尝试获取img源代码,但一直未定义

<table id="video_jacket_info">
        <tbody>
            <tr>
                <td style="vertical-align: top;">
                    <div id="video_jacket">
                        <img id="video_jacket_img" src="link.image.com" border="0"></div>
                    <!-- end of video_jacket -->
                </td>
            </tr>
        </tbody>
    </table>

我获取图像的代码总是返回undefined

axios.get(baseUrl).then(response => {
    let $ = cheerio.load(response.data, { ignoreWhitespace: true, xmlMode: true });
      console.log($('table.video_jacket_info > .video_jacket_img').attr('src'));
     // I followed @JJJ comment but still return undefined
      console.log($('table.video_jacket_info .video_jacket_img').attr('src'));
    });

  }).catch(err => {
     console.log(err);
  });
wfveoks0

wfveoks01#

两个问题:

  1. >表示CSS选择器中的"直接子项"。空格表示"任何后代"。删除>
  2. .表示类。#表示id。这里我们需要后者。
    进行这些更改后,选择器变为#video_jacket_info #video_jacket_img
    然而,由于id是唯一的,你可以将选择器简化为#video_jacket_img,添加的父上下文并不能消除任何歧义,而且会使选择器更脆弱,因为站点可能会更改或删除父上下文。
const cheerio = require("cheerio"); // ^1.0.0-rc.12

const html = `
<table id="video_jacket_info">
  <tbody>
    <tr>
      <td style="vertical-align: top;">
        <div id="video_jacket">
          <img id="video_jacket_img" src="link.image.com" border="0"></div>
        <!-- end of video_jacket -->
      </td>
    </tr>
  </tbody>
</table>`;

const $ = cheerio.load(html);
console.log($("#video_jacket_img").attr("src")); // => link.image.com

相关问题