javascript 使用cheerio on xml从figure标签获取图像

jv2fixgn  于 2023-05-21  发布在  Java
关注(0)|答案(2)|浏览(107)

我试图从一个项目中的以下XML标记中提取img src
我在呼叫cheerio.像这样加载我的响应数据

const $ = cheerio.load(response.data, { xmlMode: true });
    $("item").each((i, item) => {

我在item中遇到了这个特定的标记,我想从中提取img src

<figure class="wp-block-image size-large">
<img decoding="async" loading="lazy" width="800" height="572" src="http://wmcmuaythai.org/wp-content/uploads/2023/04/WhatsApp-Image-2023-04-07-at-3.18.13-PM-2-800x572.jpeg" alt="" class="wp-image-43535" srcset="http://wmcmuaythai.org/wp-content/uploads/2023/04/WhatsApp-Image-2023-04-07-at-3.18.13-PM-2-800x572.jpeg 800w, http://wmcmuaythai.org/wp-content/uploads/2023/04/WhatsApp-Image-2023-04-07-at-3.18.13-PM-2-350x250.jpeg 350w, http://wmcmuaythai.org/wp-content/uploads/2023/04/WhatsApp-Image-2023-04-07-at-3.18.13-PM-2-768x549.jpeg 768w, http://wmcmuaythai.org/wp-content/uploads/2023/04/WhatsApp-Image-2023-04-07-at-3.18.13-PM-2.jpeg 1024w" sizes="(max-width: 800px) 100vw, 800px" />
</figure>

我已经尝试了以下cheerio查询,要么继续得到未定义或不是我想要的。

$(item).find("figure").find("img").attr("src")
$(item).find("img").attr("src")
$(item).find("figure").children().find("img").attr("src")
$(item).find("figure").first().find("img").attr("src")

这是我试图从中提取图的RSS提要
http://wmcmuaythai.org/feed/

vlju58qv

vlju58qv1#

我对XML不是很熟悉,但是您想要的标记看起来像是在CDATA中。我通过将CDATA文本加载到Cheerio中,然后遍历内部结构来执行had success in the past

const cheerio = require("cheerio"); // ^1.0.0-rc.12

fetch("<Your URL>")
  .then(res => {
    if (!res.ok) {
      throw Error(res.statusText);
    }

    return res.text();
  })
  .then(html => {
    const $ = cheerio.load(html, {xml: true});
    const result = [...$("content\\:encoded")].flatMap(e =>
      [...$.load($(e).text())("img")].map(e => $(e).attr("src"))
    );
    console.log(result);
    console.log(result.length); // => 51
  })
  .catch(err => console.error(err));

您可能希望取消展平贴图以保持分组,具体取决于预期的结果。

m3eecexj

m3eecexj2#

您可以使用$("img", item)选择器在item元素中查找img标记,然后使用.attr("src")

const $ = cheerio.load(response.data, { xml: true });

$("item").each((i, item) => {
  const imgSrc = $("img", item).attr("src");
  console.log(imgSrc);
});

相关问题