没有Node js的Web Scraping可能吗?

问题描述 投票:-3回答:3

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

关于这些限制,我想询问是否可以使用javascript搜索外部网页的内容(例如,在后台运行webworker)。

例如。我想要做:

获取谷歌图片搜索的第一个网址链接。

编辑:

我现在尝试了它并且它工作但是在2周之后我现在得到这个错误:

跨源请求已阻止:同源策略禁止在....读取远程资源(原因:缺少CORS头“Access-Control-Allow-Origin”)。

任何想法如何解决?

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

javascript html web-scraping web-worker
3个回答
2
投票

是的,这是可能的。只需使用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问题;如果您想这样做,请在您自己的服务器上运行您自己的代理。


2
投票

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

Web worker能够使用XMLHttpRequest请求HTML内容,然后以编程方式解析传入的XML。请注意,如果目标网页属于外部域,则必须发送相应的CORS标头。然后,您可以从生成的HTML中挑选内容。

解析使用CSS和JavaScript生成的内容将更加困难。您将不得不从输入流在主机页面上构建沙盒内容,或者运行某种解析器,这似乎不太可行。

简而言之,您的问题的答案是肯定的,因为您拥有执行网络请求的工具和图灵完备语言,可用于构建您想要的任何类型的解析和抓取。所以在技术上任何事都有可能。

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

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


0
投票

我也听说python也在刮,但是nodejs + puppeteer踢屁股......而且很容易学习

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