cheerio 相关问题

专为服务器设计的核心jQuery的快速,灵活和精益实现。 https://github.com/cheeriojs/cheerio

使用 Cheerio 展开多个嵌套 HTML 元素

给定一个包含多个嵌套元素的 HTML 字符串,如何使用 Cheerio 删除所有字体元素,同时保留最里面的字体元素的内部内容? 例如,这是 b...

回答 1 投票 0

使用 Cheerio 取消多个嵌套 HTML 元素

给定一个包含多个嵌套元素的 HTML 字符串,如何使用 Cheerio 删除所有字体元素,同时保留最里面的字体元素的内部内容? 例如,这是 b...

回答 1 投票 0

Express Router API 中带有 Cheerio 的 Puppeteer-cluster 返回空响应

我正在使用express、puppeteer-cluster和cheerio编写一个API,它返回包含一个或多个可以作为查询参数添加的单词的所有锚元素。我想按顺序使用 puppeteer ...

回答 1 投票 0

抓取具有动态内容的网页 - Cheerio

我正在尝试使用node js和cheerio抓取这个html,以从span标签中获取72。但是,当我放置选择器时,它不会返回任何内容(空字符串)。 在这种情况下,我想要 72 位于...

回答 1 投票 0

如何使用cheerio和axios选择图像url

const express = require("express"); const Cheerio = require("cheerio"); const axios = require("axios"); const cors = require("cors"); 常量应用程序 = Express(); ...

回答 2 投票 0


无法使用 Cheerio 抓取 Google 地图

我想首先这是我第一次使用 Cheerio 库,所以我可能会犯一个简单的错误。我正在尝试抓取 Google 地图页面以查找列出的电话号码。当我你...

回答 1 投票 0

Cheerio 抓取特定 html 数据元素时遇到的问题

嗨,我正在尝试使用 Cheerio 从网站上抓取一些数据。这是周一至周五的菜单 我找到了一种从周三到周五抓取菜单的方法,但周一和周二我很挣扎。 该...

回答 1 投票 0

CheerioJS 获取具体 <li> 标题文本“我想要什么”

我正在尝试获取标题为“我想要的”的 li 元素 这是我的代码: 让想要= [] $$('li').each((wantIdx,wantElement) => { 常量想要= $(

回答 2 投票 0

如何使用axios和cheerio实现多页面抓取

您好,我正在使用 axios 和 Cheerio 来抓取一些数据。我想抓取多个页面, url 结构类似于 example.com/?page=1。我如何用计数器抓取每个页面? axios({...

回答 1 投票 0

如何仅在 < strong > 为“纬度”时抓取跨度值? NodeJS Cheerio

假设这个 HTML 列表: 管理员名称 阿姆斯特丹 纬度 假设这个 HTML 列表: <li> <strong> Admin name </strong> <span itemprop="addresslocality"> Amsterdam </span> <li> <li> <strong> Latitude </strong> <span itemprop="addresslocality"> 52.370216 </span> <li> <li> <strong> Longitude </strong> <span itemprop="addresslocality"> 4.895168 </span> <li> 如何获取纬度和经度的跨度值?如果我只是 .get() 第二个和第三个 itemprop 有时会得到不需要的值。 (基于列表中 itemprop 属性的数量) 尝试使用 contains 选择器: dom.find('strong:contains("Latitude")').next().text().trim() // 52.370216

回答 1 投票 0

如何显示循环抓取的响应(cheerio)

我正在抓取这个网站以收集 2013 年的所有行,但有 7 页,我的请求处于循环状态。收到全部 7 个回复后如何显示结果?如果我...

回答 1 投票 0

cheeriojs - 如何循环遍历每个对象?

我有下面的代码: $('.name').filter(function(){ var 数据 = $(this); 名称 = data.text(); json.name = 名称; }) 这将从该 div 返回文本: 我有下面的代码: $('.name').filter(function(){ var data = $(this); name = data.text(); json.name = name; }) 这将返回该 div 中的文本: <a href="javascript:void(0)" class="name">This is a name</a> 页面上基本上有大约 20 张人物照片,因此页面上大约有 20 个左右 <a> 标签,类名为 name。我如何循环遍历每个 <a> 标签并生成一个 JSON 变量,其中包含如下所示的内容 { [id: 0, name: 'name 1'],[id: 1, name: 'name 2'] } 目前我只能让它保存一个名字的值,目前对我来说没什么用! 任何帮助表示赞赏! 看来你有可用的 jQuery,这稍微简化了任务。使用.each(): var myList = []; var id = 0; $('name').each(function() { var name = $(this).text(); myList.push({id: id, name: name}); id = id + 1; } console.log(myList);

回答 1 投票 0

node.js + Cheerio scrape:传递一组网址进行下载?

首先,这是我到目前为止所取得的进展的代码: var http = require("http"); // 下载 URL 并调用的实用函数 // 回调数据。 函数下载(url,回调){ ...

回答 3 投票 0

使用cheerio抓取嵌套xml

我正在尝试使用cheerio 废弃一些PubMed 数据。以下脚本工作正常,但当某些 xml 标记不存在时,它会生成错误排序的输出。 var request = require('请求'),

回答 1 投票 0

Nodejs 抓取选项

我正在尝试在节点上为我的货币兑换图构建一个抓取引擎,目前我正在使用request+cheerio,但是由于一些银行网站在html中不使用id/class'es我的代码一些...

回答 1 投票 0

使用链式选择器方法和克隆的 jquery/cheerio 元素

我在javascript中使用cheerio,它使用jquery语法来选择dom元素。我克隆了一个圆顶元素,如下所示: var 克隆 = $('.a').clone() 现在我想访问那个克隆你的数据...

回答 1 投票 0

在给定时间自动启动node.js脚本

我正在使用node.js/express.js脚本从网站上抓取数据。我需要的数据是每天生成的,因此我需要我的脚本每天在给定时间自动启动。 有没有...

回答 2 投票 0

使用cheerio在node js中抓取时获取意外/不存在的元素/标签

我正在抓取并解析网页的内容(https://www.mydealz.de/new)。结构如下。 我正在抓取并解析网页内容(https://www.mydealz.de/new)。结构如下。 <div class="threadGrid-title"> <strong><a href="">title</a></strong> <span class=" overflow--fade"> <span class="overflow--wrap-off flex boxAlign-ai--all-bl"> <span class="vAlign--all-tt"> <span class="threadItemCard-price text--b thread-price size--all-l size--fromW3-xl space--mr-0">**price**</span> </span> <span class="mute--text text--lineThrough space--ml-1 size--all-l size--fromW3-xl ">**old price**</span> <span class="text--color-charcoal space--ml-1 size--all-l size--fromW3-xl">**Discount%**</span> </span> </span> </div> 我已经能够获得标题,但对于其他事物和元素,它给了我奇怪和意想不到的东西。 代码如下。我正在使用cheerio。 async function checkDeals() { try { const response = await axios.get(baseUrl); const $ = cheerio.load(response.data); const deals = []; // Iterate over each deal $('.thread--type-list').each((index, element) => { const threadTitleElement = $(element).find('.threadGrid-title'); // Print all child elements of .threadGrid-title console.log('Child elements of .threadGrid-title:'); threadTitleElement.each((i, el) => { $(el).find('*').each((j, child) => { console.log($.html(child)); // Print HTML of each nested element }); }); // Attempt to extract deeply nested price and discount const priceElement = $(element).find('.threadItemCard-price'); const discountElement = $(element).find('.text--color-charcoal'); // Extracting the price and discount with more detailed text processing const price = priceElement.map((i, el) => $(el).text().trim()).get().join(' '); const discount = discountElement.map((i, el) => $(el).text().trim()).get().join(' '); console.log('Price:', price); console.log('Discount:', discount); }); } catch (error) { console.error('Error fetching the deals:', error); } } 输出截图: 在此输入图片描述 输出: Child elements of .threadGrid-title: <strong class="thread-title "><a class="cept-tt thread-link linkPlain thread-title--list js-thread-title" title="(Amazon Prime) Victorinox Universalschäler" href="https://www.mydealz.de/deals/amazon-prime-victorinox-universalschaler-2393896" data-t="threadLink" data-t-click="">(Amazon Prime) Victorinox Universalschäler</a></strong> <a class="cept-tt thread-link linkPlain thread-title--list js-thread-title" title="(Amazon Prime) Victorinox Universalschäler" href="https://www.mydealz.de/deals/amazon-prime-victorinox-universalschaler-2393896" data-t="threadLink" data-t-click="">(Amazon Prime) Victorinox Universalschäler</a><span class="overflow--fade"><div aria-busy="true" class="js-vue2" data-handler="vue2" data-vue2="{&quot;name&quot;:&quot;ThreadPriceListing&quot;,&quot;props&quot;:{&quot;threadId&quot;:2393896}}"><div class="bRad--a-m space--h-1 bRad--circle skeleton bg--color-greyPanel flex"><img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="28px" class="hide--toW3"><img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="26px" class="hide--fromW3"></div></div><span class="thread-divider"></span><div aria-busy="true" class="js-vue2" data-handler="vue2" data-vue2="{&quot;name&quot;:&quot;MerchantLabelThreadListing&quot;,&quot;props&quot;:{&quot;threadId&quot;:2393896}}"><div class="bRad--a-m space--h-1 bRad--circle skeleton bg--color-greyPanel flex"><img src="/assets/img/skeletons/item-type-F.svg" width="40px" height="20px"></div></div></span> <div aria-busy="true" class="js-vue2" data-handler="vue2" data-vue2="{&quot;name&quot;:&quot;ThreadPriceListing&quot;,&quot;props&quot;:{&quot;threadId&quot;:2393896}}"><div class="bRad--a-m space--h-1 bRad--circle skeleton bg--color-greyPanel flex"><img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="28px" class="hide--toW3"><img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="26px" class="hide--fromW3"></div></div> <div class="bRad--a-m space--h-1 bRad--circle skeleton bg--color-greyPanel flex"><img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="28px" class="hide--toW3"><img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="26px" class="hide--fromW3"></div> <img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="28px" class="hide--toW3"> <img src="/assets/img/skeletons/item-type-F.svg" width="60px" height="26px" class="hide--fromW3"> <span class="thread-divider"></span> <div aria-busy="true" class="js-vue2" data-handler="vue2" data-vue2="{&quot;name&quot;:&quot;MerchantLabelThreadListing&quot;,&quot;props&quot;:{&quot;threadId&quot;:2393896}}"><div class="bRad--a-m space--h-1 bRad--circle skeleton bg--color-greyPanel flex"><img src="/assets/img/skeletons/item-type-F.svg" width="40px" height="20px"></div></div> <div class="bRad--a-m space--h-1 bRad--circle skeleton bg--color-greyPanel flex"><img src="/assets/img/skeletons/item-type-F.svg" width="40px" height="20px"></div> <img src="/assets/img/skeletons/item-type-F.svg" width="40px" height="20px"> Price: Discount: 我想知道价格、旧价和折扣。 最经典的 Axios/Cheerio 错误是假设它运行 JS,或者服务器将始终为您的浏览器提供相同的服务,或者您在开发工具控制台中看到的内容反映了 Axios 获取的内容以及 Cheerio 将解析的内容。 事实上,如果您幸运并且服务器没有阻止您或发送不同的 HTML 文档,您所获得的只是 Axios 页面的 view-source: 版本。不执行任何 JS,并且使用 JS 加载数据的单页应用程序不会被水合。 但有时,您想要的数据在初始加载中可用,只是不一定在您期望的位置。在这种情况下,数据方便地存储在 [data-vue2] 标签中的 JSON blob 中,JS 可能在页面加载后将其水化为 HTML 元素: const axios = require("axios"); // ^1.6.8 const cheerio = require("cheerio"); // ^1.0.0-rc.12 const url = "<Your URL>"; axios.get(url) .then(({data: html}) => { const $ = cheerio.load(html); const data = [...$("[data-vue2]")] .map(e => $(e).data("vue2")) .filter(e => e.name === "ThreadMainListItemNormalizer") .map(e => e.props.thread); console.log(JSON.stringify(data, null, 2)); }) .catch(err => console.error(err));

回答 1 投票 0

无法在 Next.js 14 服务器操作中使用 Cheerio 从 Beatport 抓取艺术家数据

我正在尝试在 Next.js 14 服务器操作中使用 Cheerio 从 Beatport 抓取艺术家数据。目标是搜索艺术家,单击结果中的第一个艺术家卡,然后提取艺术家...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.