NodeJS 如何从浏览器使用cheerio

pcrecxhr  于 2023-01-08  发布在  Node.js
关注(0)|答案(4)|浏览(287)

我是JavaScript的新手,我很确定我错过了从HTML页面(由Web浏览器浏览)使用JS的一些基本知识。
我的目标是使用cheerio从a dynamic website中删除照片链接,并将它们显示在js gadget中(例如,使用lightslider),following this tutorial获得以下脚本并在bash终端中通过简单的nodejs scrapt.js运行它看起来相当成功:

var request = require('request');
var cheerio = require('cheerio');
request('https://outbox.eait.uq.edu.au/uqczhan2/Photos/', function (error, respo
  if (!error && response.statusCode == 200) {
    console.log(html);
  }
});

但是现在我不能在普通的浏览器中运行这个脚本(通过按f12 -〉console),在第一个语法之后显示错误:

>var request = require('request');
VM85:1 Uncaught ReferenceError: require is not defined
    at <anonymous>:1:15

我知道一些JavaScript模块在使用之前需要加载,例如d3.js。我需要运行:

<script src="https://d3js.org/d3.v4.min.js"></script>

要使用所有的d3函数。我应该如何实现同样的事情,让我在网络浏览器中使用cheerio?

yb3bgrhw

yb3bgrhw1#

你不能直接在浏览器中运行node.js代码,请查看browserify,这是一个允许你在浏览器中运行node.js代码的模块。

aurhwmvo

aurhwmvo2#

Cheerio使用的库需要process,即Node进程对象,而浏览器中没有。
browserify工作,但是。
来源:试图让cheerio与Webpack一起工作的无尽头痛。

0yycz8jy

0yycz8jy3#

这是一个xy问题。你可能会假设要在浏览器中解析HTML,你应该使用Cheerio,一个Node.js HTML解析器。问题是,如果没有像browserify这样的构建工具来模拟require并使之成为可能,你就不能在浏览器中运行Node.js代码。
然而,在开始添加构建过程之前,有必要后退一步,并认识到浏览器已经有了一个不需要任何包的原生HTML解析器,以及jQuery,它是一个简单的<script>标记,不需要构建过程或解决方案。事实上,Cheerio的发明纯粹是为了将jQuery语法移植到没有DOM Node.js的环境中。
因此,不必将jQuery移植到Node,然后以Rube Goldbergian的方式返回到浏览器,只需直接使用jQuery或原生DOM,这些都是在Cheerio之前的原始原生浏览器工具。
request在浏览器中也不是必需的。它是另一个不适用于浏览器环境的Node包。如上所述,您可以使用jQuery或本地fetch调用来发出HTTP请求。
再退一步说:大多数服务器都设置了CORS策略,以禁止不同来源的浏览器客户端向其资源发出跨来源HTTP请求。您可能需要运行Node和Express的服务器来绕过此限制。在这种情况下,Cheerio可能再次派上用场,这样您就可以从后端的第三方站点的响应中提取相关数据,并将其准备为对前端的响应。
不需要编写和托管自己的服务器,就可以使用像cors-anywhere这样的代理来跨源访问资源。
另请参见Client on Node.js: Uncaught ReferenceError: require is not defined

wfsdck30

wfsdck304#

简短的回答是,使用与包含d3js库相同的方法。
require()requiredjs中定义,要使用require函数加载请求cheerio,您需要首先导入requirejs,方法与导入d3相同。requirejs site
Nodejs是服务器端的javascript,当你试图在客户端的浏览器中运行它们时,你需要非常小心。就像创建休息端点是服务器端,这在浏览器中是做不到的。
正如上面的答案所建议的,您可以使用构建系统(如webpack等wll)或加载程序(如systemjs)来加载脚本。

相关问题