我目前有一个简单的网页,它只包含.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描述的错误
是的,这是可能的。只需使用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问题;如果您想这样做,请在您自己的服务器上运行您自己的代理。
是的,理论上可以在客户端上进行“网页抓取”(即解析网页)。但是有一些限制,我会质疑你为什么不选择在服务器或桌面上运行的程序。
Web worker能够使用XMLHttpRequest请求HTML内容,然后以编程方式解析传入的XML。请注意,如果目标网页属于外部域,则必须发送相应的CORS标头。然后,您可以从生成的HTML中挑选内容。
解析使用CSS和JavaScript生成的内容将更加困难。您将不得不从输入流在主机页面上构建沙盒内容,或者运行某种解析器,这似乎不太可行。
简而言之,您的问题的答案是肯定的,因为您拥有执行网络请求的工具和图灵完备语言,可用于构建您想要的任何类型的解析和抓取。所以在技术上任何事都有可能。
但真正的问题是:它会明智吗?当其他技术出现时,您会选择这种方法吗?好吧,不。对于大多数情况,我不明白为什么你不会只使用例如编写服务器端程序。无头的Chrome。
如果您不想使用Node - 或者由于某种原因无法部署Node - 有很多Web抓取包和现有技术,如Go,C,Java和Python。搜索首选编程语言的包管理器,您可能会找到几个。
我也听说python也在刮,但是nodejs + puppeteer踢屁股......而且很容易学习