问题标签 [cheerio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1193 浏览

node.js - 无法使用 Cheerio 提取 html 片段

我正在使用cheerio在节点 js 服务器上执行一些 html 操作。我有一个像这样的 html 字符串

返回的输出是

我期望的输出是ordered list后跟paragraph1paragraph2

我做错了什么还是这是cheerio中的错误?

0 投票
1 回答
221 浏览

function - 在cheerio对象上没有运行的coffeescript中的函数

我有这个代码:

所以当这段代码执行时,基本上没有错误,在我的界面中我得到了一个结果

但似乎每个块中的代码永远不会被执行(没有控制台输出'asdf')。我究竟做错了什么?

0 投票
2 回答
305 浏览

jquery - 从标签中提取 URL

我正在寻找通过包含该元素的 HTML 请求进行解析:

尝试获取 img src 标签。我想要的只是网址。

在这一点上,我可能过火了。使用 Request 和 Cheerio 来尝试实现这一点。

在我尝试过的 20 种不同方法中,这是我当前的代码。

我收到错误消息:

正如我所说,这可能过于复杂了。最简单(或只是功能性)的方法是什么?

0 投票
1 回答
1226 浏览

node.js - 使用 Nodejs 和 Cheerio 解析损坏的 HTML 代码

我正在尝试使用 Nodejs 和 Cheerio 抓取带有表格数据的纯静态 html 页面。但问题是,该页面正在尝试抓取没有正确的 HTML DOM。我的意思是,有许多未关闭的开始标签。还有其他</table>没有开口的结束标签()。

示例代码(警告:代码接近真实示例 & html 已损坏)

 

正如人们所看到的,有没有关闭的 P 标签。在​​底部有 没有打开的</table>&标签。</div>那么如何使用cheerio 和 nodejs 获取 Data1、Data2、Data3、Data4 呢?任何其他库也可以有效地解析此类数据

编辑(解决方案):问题已解决。我所做的只是将 html 标签转换为小写,它工作得很好。我不知道为什么小写很重要,但它只适用于cheerio

0 投票
1 回答
1144 浏览

javascript - (节点)警告:检测到可能的 EventEmitter 内存泄漏

我在cheerio.js 和request.js 之上编写了一个小爬虫脚本,以从预订机构的网站上获取联系信息(URL 和电子邮件)。虽然它确实运行并返回了我需要的所有信息,但在运行它时我连续 5 次收到以下警告:

我的直觉告诉我,我可能会收到这个警告,因为我将一个请求嵌套在另一个请求中。虽然我不确定,但我所知道的是,当调用位于getArtistInfo()函数的 Cheerio.js.each()循环之一中的嵌套请求时,警告会立即显示。(查看下面的代码以了解我的意思)

这是我的刮刀的代码:

我在这里把意大利面弄得一团糟吗?

如何阻止此 EventEmitter 内存泄漏问题的发生?

0 投票
1 回答
2872 浏览

javascript - 在回调函数中获取数据推送给它的全局定义数组为什么在全局范围内是空的?

我将一个空数组分配给全局变量artistURLs。然后,我使用 Cheerio迭代器方法将字符串(局部变量artistURL)推送到数组中。artistURLs.each()

我知道这artistURL被成功推进了artistURLs,因为

console.log(artistURLs);

将在我的终端中显示填充的数组。问题是如果我尝试console.log(artistURLs);在全局范围内的回调函数之外运行。例如

所以你可以看到我已经搬到console.log(artistURLs);外面了request()。出于某种原因,尝试artistURLs在全局范围内访问会返回一个空数组,就好像在 `request()~ 中发生的所有处理都没有发生过一样。

这是怎么发生的,如何确保所有被推送的 url 都artistURLs保留在url 中artistURLs

谢谢

0 投票
1 回答
625 浏览

node.js - 如何使用 Cheerio 和 node.js 抓取当前正在使用的页面?

所以这可能是一个令人费解的问题,但这里有:

我正在使用 node.js 创建一个简单的、本地托管的网络爬虫。当我手动定义要在源文件中抓取的 URL 时,它工作得非常好,我现在正试图提示用户输入他们选择的 URL。然后我将他们输入的 URL 附加到一个空的 div 中,理想情况下,我可以使用cheerio 来获取该 div 的内容。

不幸的是,我不知道如何解析正在运行脚本的同一页面上创建的数据。任何见解都会非常非常感谢!

0 投票
3 回答
1412 浏览

javascript - Why is Node (+Cheerio) using so much RAM?

im currently trying to use Node to monitor a webpage for changes. But the thing is that after some page loads, the memory usage of node.exe goes up incredibly fast, about 40 - 50 Mb at a time. I've determined that the issue comes from this part of my code:

I'm using Cheerio module to do some DOM manipulation, which seems to have the biggest impact on the memory usage. Is there a way to clear the data used completely for every function call?? Thanks.

0 投票
2 回答
2530 浏览

node.js - call back on cheerio node.js

I'm trying to write a scraper using 'request' and 'cheerio'. I have an array of 100 urls. I'm looping over the array and using 'request' on each url and then doing cheerio.load(body). If I increase i above 3 (i.e. change it to i < 3 for testing) the scraper breaks because var productNumber is undefined and I can't call split on undefined variable. I think that the for loop is moving on before the webpage responds and has time to load the body with cheerio, and this question: nodeJS - Using a callback function with Cheerio would seem to agree.

My problem is that I don't understand how I can make sure the webpage has 'loaded' or been parsed in each iteration of the loop so that I don't get any undefined variables. According to the other answer I don't need a callback, but then how do I do it?

Example of output:

0 投票
1 回答
117 浏览

node.js - Chrome 显示的 html 与我的 RequestJS 和 CheerioJS 应用程序不同

我的爬虫应用程序正在搜索一个带有查询字符串的 Vimeo URL,它是

'http://vimeo.com/search?q=angularjs'

当我在 Chrome 上加载该 URL 时,我可以从我的抓取工具中看到许多没有与我request()的 URL 一起显示的元素。我可以使用 Chrome 和我的爬虫加载的 HTML 似乎是静态元素,例如导航栏和页脚中的 HTML。当我尝试访问由 Vimeo 处理查询字符串生成的任何元素时search?q=angularjs,我的抓取工具无法访问 Chrome 中显示的视频库网格。所以到目前为止,这是我的刮刀:

用 Cheerio加载身体后$,我跑了

console.log($('#site_header .join a').text());

记录Join到控制台。这样可行。伟大的。但如果我这样做

console.log($('#page_header h1').text());

我登录到控制台的内容是Please Try Again我认为这意味着无法完成查询。当我在 Chrome 的页面源代码中看到那段 HTML 时,我看到:

为了确定我跑了

console.log($('html').html());

这让我回想起一个缺少browse_content包含视频缩略图画廊网格的 div 的 HTML 页面。这就是为什么下面的代码什么也不返回的原因:

那么为什么 Vimeo 不想给我的爬虫提供它所请求的内容呢?