繁体   English   中英

没有Node js的网页抓取可能吗?

[英]Webscraping without Node js possible?

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

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

例如我想做:

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

编辑:

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

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

任何想法如何解决?

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

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

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

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

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

但真正的问题是:这样做是否明智? 当其他技术可用时,您会选择这种方法吗? 嗯,不。 在大多数情况下,我不明白您为什么不使用无头 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 踢屁股......而且很容易学习

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM