没有 Node js 的 Web 抓取可能吗?

Webscraping without Node js possible?

我目前有一个简单的网页,它只包含一个 .js、.css .html 文件。我不想使用任何 Node.js 东西。

关于这些限制,我想问一下是否可以使用 javascript(例如 运行 后台网络工作者)搜索外部网页的内容。

例如我想做:

第一个 url link google 图片搜索。

编辑:

我现在尝试了它并且发现它有效但是在 2 周后我现在得到这个错误:

Cross-Origin 请求被阻止:同源策略不允许读取位于...的远程资源。 (原因:缺少 CORS header ‘Access-Control-Allow-Origin’)。

有什么解决办法吗?

这是火狐描述的错误: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin

是的,理论上可以在客户端上进行“网页抓取”(即解析网页)。但是有一些限制,我想问为什么你不选择 运行 在服务器或桌面上的程序。

Web 工作者能够使用 XMLHttpRequest 请求 HTML 内容,然后以编程方式解析传入的 XML。请注意,如果目标网页属于外部域,则它必须发送适当的 CORS headers。然后,您可以从结果 HTML.

中挑选出内容

解析使用 CSS 和 Java 脚本生成的内容会更难。您要么必须从输入流在您的主机页面上构建沙盒内容,要么 运行 某种解析器,这似乎不太可行。

简而言之,您的问题的答案是肯定的,因为您拥有执行网络请求的工具和 Turing-complete 语言来构建您想要的任何类型的解析和抓取。所以从技术上讲,任何事情都是 可能的

但真正的问题是:这样做明智吗?当手头有其他技术时,您会选择这种方法吗?好吧,不。在大多数情况下,我不明白你为什么不使用例如编写服务器端程序。无头 Chrome.

如果您不想使用 Node - 或者由于某种原因无法部署 Node - 有许多 Web 抓取包和现有技术的语言,例如 Go、C、Java 和Python。搜索您首选编程语言的包管理器,您可能会找到几个。

是的,这是可能的。只需使用 XMLHttpRequest API:

var request = new XMLHttpRequest();
request.open("GET", "https://bypasscors.herokuapp.com/api/?url=" + encodeURIComponent("https://duckduckgo.com/html/?q=stack+overflow"), true);  // last parameter must be true
request.responseType = "document";
request.onload = function (e) {
  if (request.readyState === 4) {
    if (request.status === 200) {
      var a = request.responseXML.querySelector("div.result:nth-child(1) > div:nth-child(1) > h2:nth-child(1) > a:nth-child(1)");
      console.log(a.href);
      document.body.appendChild(a);
    } else {
      console.error(request.status, request.statusText);
    }
  }
};
request.onerror = function (e) {
  console.error(request.status, request.statusText);
};
request.send(null);  // not a POST request, so don't send extra data

请注意,我必须使用代理来绕过 CORS 问题;如果你想这样做,运行你自己的服务器上的代理。

我也听说过 python 用于 抓取 ,但是 nodejs + puppeteer kick ass...而且非常容易学习