使用客户端脚本从远程网站获取所有 HTML

Grab all HTML from a remote website using client-side script

本文关键字:网站 获取 HTML 客户端 脚本 程网站      更新时间:2023-09-26

我想创建一个网络应用程序来组织和分析来自另一个网站的信息。另一个网站没有API,所以我想从中获取所有HTML(在允许其脚本运行之后),并让我可以使用jquery为我的Web应用程序进行挑选。

我意识到PHP或其他服务器端语言是这个问题的真正答案,但我只知道前端的东西,只想做一些快速而肮脏的东西。除了我,没有人使用它。

我现在能想到的唯一实现这一目标的方法是使用隐藏的 iframe。还有什么(相对)比这个解决方案更优雅的吗?

您可以使用 YQL 休息调用轻松完成此操作。

请参阅此处的示例:https://developer.yahoo.com/yql/guide/yql-select-xpath.html

基本上,您只需要对雅虎的YQL服务器进行一些AJAX调用,它将返回响应,并在其中找到您查询的页面的HTML。

游乐场链接 - 如您所见,REST 查询位于页面底部。

更新-

谷歌"使用 PhantomJS 抓取网页",您将获得报废和解析页面并获得最终结果所需的确切内容。

事实上,隐藏的iframe可能无法工作,因为大多数浏览器不允许一个窗口的javascript在另一个窗口(例如iframe)的上下文中运行。

为什么不使用jQuery.get()获取HTML?

您无法从 IFrame 访问 DOM,因为它违反了跨源资源共享 (CORS) 规则。使用 IFrames,您需要从相同的主机(即至少 foo.com 和 bar.foo.com)提供两个帧 - 如果它们在任何方面都不同,则必须显式设置 document.domain 属性。就像这样,一个页面不能只包含你的银行/Facebook/其他敏感信息网站的IFrame,然后简单地窃取内容。查看 MDN 了解更多信息

如果你真的想从网站中提升HTML内容,那么使用JavaScript并不是一个最佳解决方案,因为跨源策略的存在是有充分理由的。

简单答案:


现代浏览器不会让你这样做,否则它们是不安全的。

有关

请求网页的方法的详细信息,请参阅此问题,但所有方法都要求您位于同一域中。

我的建议:

选项A:周日休息(像今天一样!)并学习一些基本的服务器知识。你已经知道了JavaScript,你可以在一天内学会用nodejs构建一个简单的Web服务器!

选项B:你真的不想碰后端的东西。请考虑将您的应用构建为 Chrome 应用。在此方法中,您可以礼貌地要求用户从远程位置获取内容。

你的目标是使用 JavaScript 进行"屏幕抓取"吗?
如果是这样,网站将无法运行(出于安全原因),但您可能仍然可以选择。

您可以通过将Javascript粘贴到书签中来创建"书签",前面加上javascript:。然后,您只需打开网页,然后单击书签,即可执行代码。

我建议先将所有代码写在一个实际的JavaScript文件中,然后将其粘贴到书签中。举个例子:

javascript:
alert("hello");